本帖最后由 小墨hacker 于 2015-11-10 17:31 编辑
已经记不得什么了,全是翻文件看看,所以这一部分应该会比较模糊。
9月中旬下旬熟悉输入输出等,练习有单位转换,计算面积,字符串输入输出……
9月下旬接触选择结构。
十月上旬接触简单的子函数及调用(...没按顺序学,我比较贪心,总是翻看后面部分的内容看到不懂就度娘。所以学习的内容基本都是零碎的...到了后来总有东西看不懂,没办法又系统得看了一遍小甲鱼的视屏。希望和我一样刚刚开始学的朋友引以为戒。)
十月中旬看到网友发在贴吧的OX棋思路,也开始边学边做。(其中学了数组、循环等)一个程序边学边做整整做了5天...#include<stdio.h>
const int KONG=0;
const int PLAYER1=1;
const int PLAYER2=2;
const int *game[3][3]={&KONG,&KONG,&KONG,&KONG,&KONG,&KONG,&KONG,&KONG,&KONG};
int luoZi_hang;
int luoZi_lie;
void QiPan()
{
int hang;
int lie;
for(hang=1;hang<=3;hang++)
{
for(lie=1;lie<=3;lie++)
{
if(*game[hang-1][lie-1]==KONG)
{
printf("*");
}
else if(*game[hang-1][lie-1]==PLAYER1)
{
printf("O");
}
else if(*game[hang-1][lie-1]==PLAYER2)
{
printf("X");
}
if(lie==3)
{
printf("\n");
}
}
}
}
void player(const int &per)
{
int luoJi;
printf("请玩家%d落子,请输入:\n",per);
printf("行:");
luoJi=scanf("%d",&luoZi_hang);
for(;luoJi!=1||luoZi_hang>3;)
{
printf("输入错误,请重新输入:");
scanf("%d",&luoZi_hang);
}
printf("列:");
luoJi=scanf("%d",&luoZi_lie);
for(;luoJi!=1||luoZi_lie>3;)
{
printf("输入错误,请重新输入:");
scanf("%d",&luoZi_lie);
}
for(;*game[luoZi_hang-1][luoZi_lie-1]!=KONG;)
{
printf("该处以落子请重新输入!\n");
printf("行:");
luoJi=scanf("%d",&luoZi_hang);
for(;luoJi!=1||luoZi_hang>3;)
{
printf("输入错误,请重新输入:");
scanf("%d",&luoZi_hang);
}
printf("列:");
luoJi=scanf("%d",&luoZi_lie);
for(;luoJi!=1||luoZi_lie>3;)
{
printf("输入错误,请重新输入:\n");
scanf("%d",&luoZi_lie);
}
}
game[luoZi_hang-1][luoZi_lie-1]=&per;
}
int win(int p)
{
int num;//相连子个数
int a=1;
for(a=1,num=1;luoZi_hang-1+a<=2&&*game[luoZi_hang-1+a][luoZi_lie-1]==p;a++)//检测纵向胜利条件
{
num++;
}
for(a=-1;luoZi_hang-1+a>=0&&*game[luoZi_hang-1+a][luoZi_lie-1]==p;a--)
{
num++;
}
if (num==3)
{
printf("\n玩家%d胜利-",p);
return 1;
}
for(num=1,a=1;luoZi_hang-1+a<=2&&*game[luoZi_hang-1][luoZi_lie-1+a]==p;a++)//检测横向胜利条件
{
num++;
}
for(a=-1;luoZi_hang-1+a>=0&&*game[luoZi_hang-1][luoZi_lie-1+a]==p;a--)
{
num++;
}
if (num==3)
{
printf("\n玩家%d胜利|",p);
return 1;
}
for(num=1,a=1;luoZi_hang-1+a<=2&&luoZi_lie-1+a<=2&&*game[luoZi_hang-1+a][luoZi_lie-1+a]==p;a++)//检测\方向胜利条件
{
num++;
}
for(a=-1;luoZi_hang-1+a>=0&&luoZi_lie-1+a>=0&&*game[luoZi_hang-1+a][luoZi_lie-1+a]==p;a--)
{
num++;
}
if (num==3)
{
printf("\n玩家%d胜利\",p);
return 1;
}
for(num=1,a=1;luoZi_hang-1-a>=0&&luoZi_lie-1+a<=2&&*game[luoZi_hang-1-a][luoZi_lie-1+a]==p;a++)//检测/方向胜利条件
{
num++;
}
for(a=-1;luoZi_hang-1-a<=2&&luoZi_lie-1+a>=0&&*game[luoZi_hang-1-a][luoZi_lie-1+a]==p;a--)
{
num++;
}
if (num==3)
{
printf("\n玩家%d胜利/",p);
return 1;
}
else//返回无胜负的返回值
{
return 0;
}
}
int main()
{
int lunCi;
int w=0;
QiPan();
for(lunCi=1;lunCi<=9&&w==0;lunCi++)
{
if(lunCi%2==1)
{
player(PLAYER1);
QiPan();
w=win(PLAYER1);
}
if(lunCi%2==0)
{
player(PLAYER2);
QiPan();
w=win(PLAYER2);
}
}
if (w==0)
printf("\n平局");
return 0;
}
|