|

楼主 |
发表于 2015-11-10 17:28:32
|
显示全部楼层
本帖最后由 小墨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;
- }
复制代码
|
|