问题及代码:

/*
*copyright (t) 2016,烟台大学计算机学院
*All rights reserved.
*文件名称:test.cpp
*作者:张晴晴
*完成日期:2016年6月30日
*版本号:v1.0
*问题描述:五子棋
*输入描述:按照方式操作进行五子棋游戏,落子还可以悔棋
*程序输出:五子棋对战的实况,判断输赢
*///五子棋小游戏#include <stdio.h>
#include<windows.h>
#include <stdlib.h>
#include<conio.h>         //使用getch()函数int startchoice,winner,player,Q[200][200]= {0};       //Q数组记录旗子
char button;                                        //读入键盘输入的指令,如→struct Point           //点坐标的结构体
{int x,y;
} point,game_xy;struct Piece            //棋子的坐标记录
{struct Point coord;struct Piece *fore;
};struct Piece *head,*p,*ptr,*ptr1;void goto_xy(int x, int y)          //光标移动函数
{COORD c;c.X=2*x;c.Y=y;SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}void Init()                //初始化函数,将记录棋子的数组初始化
{for(int i=0; i<200; i++)for(int j=0; j<200; j++)Q[i][j]=0;startchoice=0;player=1;p=(struct Piece *)malloc(sizeof(struct Piece));head=p;
}void Welcome()      //欢迎界面
{system("color 2F");              //#include<windows.h>  2 背景绿色  F  字体亮白色goto_xy(10,3);printf("—→");goto_xy(17,1);printf("主菜单");goto_xy(13,3);printf("   ***人人对战***");goto_xy(13,4);printf("     ***退出***");point.x=12;point.y=3;goto_xy(0,0);
}void ShowWho()                         //显示轮到哪一方下棋
{goto_xy(17,22);if(player==0)printf("轮到甲方落子");elseprintf("轮到乙方落子");goto_xy(point.x,point.y);
}void Draw()                //绘画游戏界面
{game_xy.x=10;game_xy.y=3;system("cls");system("color 3F");           //3 湖蓝色  F 亮白色goto_xy(15,1);printf("欢迎play our 五子棋!");/*goto_xy(29,22);printf("重新开始         r");*/goto_xy(1,22);printf("悔棋             b");goto_xy(1,23);printf("退出           ESC");const int i=8;              //const 定义的数据不可以被改变 而且修改数据比较方便const int j=19;const int k=3;goto_xy(game_xy.x-i,game_xy.y+k);         //输出甲方的下棋方法printf("甲方:    ●");goto_xy(game_xy.x-i,game_xy.y+k+2);printf("移动:  上   ↑");goto_xy(game_xy.x-i,game_xy.y+k+4);printf("        下   ↓");goto_xy(game_xy.x-i,game_xy.y+k+6);printf("        左   ←");goto_xy(game_xy.x-i,game_xy.y+k+8);printf("        右   →");goto_xy(game_xy.x-i,game_xy.y+k+10);printf("落子:   Enter");goto_xy(game_xy.x+j,game_xy.y+k);                //输出乙方的下棋方法printf("乙方:    ○");goto_xy(game_xy.x+j,game_xy.y+k+2);printf("移动:  上   ↑");goto_xy(game_xy.x+j,game_xy.y+k+4);printf("        下   ↓");goto_xy(game_xy.x+j,game_xy.y+k+6);printf("        左   ←");goto_xy(game_xy.x+j,game_xy.y+k+8);printf("        右   →");goto_xy(game_xy.x+j,game_xy.y+k+10);printf("落子:   Enter");for(int k1=0; k1<200; k1++)                 //初始化棋子记录,在第二局时有明确的作用for(int k2=0; k2<200; k2++)Q[k1][k2]=0;for(int i=0; i<18; i++)                 //画棋盘{if(i==0)                            //画第一行{goto_xy(10,i+3);printf("┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐");}if(i!=0&&i!=17)                       //画出中间16行{goto_xy(10,i+3);printf("├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤");}if(i==17)                          //画最后一行{goto_xy(10,i+3);printf("└┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┘");}}point.x=19;point.y=12;goto_xy(19,12);
}void Clean()                   //清除—→运动的轨迹
{goto_xy(10,3);printf("     ");goto_xy(24,3);printf("     ");goto_xy(10,4);printf("     ");goto_xy(24,4);printf("     ");
}void menu_choose(char press)           //选择游戏还是退出
{if(press==72)                //↑的ASCLL码{if(point.y==3)point.y=4;elsepoint.y=3;Clean();goto_xy(10,point.y);printf("—→");}if(press==80)            //↓的ASCLL码{if(point.y==4)point.y=3;elsepoint.y=4;Clean();goto_xy(10,point.y);printf("—→");}if(press==13)        // 13:回车键的ASCLL码{startchoice=point.y-2;             //startchoice 为1或2}
}void go_back(int x1,int y1)                    //悔棋函数
{goto_xy(x1,y1);if(x1==10){if(y1==3){printf("┌");}else if(y1==20){printf("└");}else{printf("├");}}else if(x1==27){if(y1==3){printf("┐");}else if(y1==20){printf("┘");}else{printf("┤");}}else{if(y1==3){printf("┬");}else if(y1==20){printf("┴");}else{printf("┼");}}Q[point.x][point.y]=0;          //在数组中将弹出的棋子对应的数据设为0goto_xy(x1,y1);
}void Record()              //记录棋子的情况
{p->coord.x=point.x;p->coord.y=point.y;ptr=p;p=(struct Piece *)malloc(sizeof(struct Piece));p->fore=ptr;ShowWho();Q[point.x][point.y]=player+1;if(player){player=0;return;}player=1;goto_xy(point.x,point.y);
}void PutDown()                 //显示落子函数
{if(Q[point.x][point.y]==0)               //先判断该位置是否有棋子{if(player){printf("●");printf("\a");                  //'\a'表示蜂鸣声Record();}else{printf("○");printf("\a");Record();}goto_xy(point.x,point.y);}
}void Play(char ch)                 //键盘的操作 移动光标 下棋和悔棋操作
{if(ch==72)           //↑的ASCLL码 光标上移{if(point.y<=3)point.y=20;elsepoint.y--;goto_xy(point.x,point.y);}if(ch==75)                      //←的ASCLL码    光标左移{if(point.x<=10)point.x=27;elsepoint.x--;goto_xy(point.x,point.y);}if(ch==77)                      //→的ASCLL码  光标右移{if(point.x>=27)point.x=10;elsepoint.x++;goto_xy(point.x,point.y);}if(ch==80)                      //↓的ASCLL码   光标下移{if(point.y>=20)point.y=3;elsepoint.y++;goto_xy(point.x,point.y);}if(ch==13)              //回车键的ASCLL码        下棋{PutDown();}if(button=='b'||button=='B')       //悔棋的操作{ptr1=p;if(p!=head){p=p->fore;free(ptr1);point.x=p->coord.x;point.y=p->coord.y;go_back(point.x,point.y);}}
}int Judge()
{int count=0;int pp=player==0?2:1;              //三目运算for(int c=0; c<200; c++){for(int r=0; r<200; r++){if(Q[r][c]!=pp)continue;//检查列int rr=r;int cc=c;while(--cc>=3 &&Q[rr][cc]==pp)count++;cc=c;while(++cc<23 &&Q[rr][cc]==pp)count++;cc=c;if(count>=4)return pp;//检查行count=0;while(--rr>=10 &&Q[rr][cc]==pp)count++;rr=r;while(++rr<30 &&Q[rr][cc]==pp)count++;rr=r;if(count>=4)return pp;//检查反斜边count=0;cc--;rr--;while((cc>=3||rr>=10) &&Q[rr][cc]==pp){count++;cc--;rr--;}rr=r;cc=c;cc++;rr++;while((cc<23||rr<30) &&Q[rr][cc]==pp){count++;cc++;rr++;}rr=r;cc=c;if(count+1>=5)return pp;//检查正斜边count=0;cc++;rr--;while((cc<23||rr>=10) &&Q[rr][cc]==pp){count++;cc++;rr--;}rr=r;cc=c;cc--;rr++;while((cc>=3||rr<30) &&Q[rr][cc]==pp){count++;cc--;rr++;}rr=r;cc=c;if(count+1>=5)return pp;count=0;}}return 0;
}int main(void)
{system("color 4E");printf("\n                  欢迎play五子棋!");goto_xy(15,3);printf("作者:小萝莉");goto_xy(17,5);printf(" HE·Honda");goto_xy(17,7);printf(" ZSSB");Sleep(3000);system("cls");while(1){Init();                        //初始化int winner=0;Welcome();                   //欢迎界面while(1)                  //读取菜单选项{char choice=getch();menu_choose(choice);if(startchoice!=0)break;}if(startchoice==1)                //选择人人对战{Draw();goto_xy(17,22);printf("轮到甲方落子");goto_xy(point.x,point.y);while(1){button=getch();Play(button);      //读取键盘的操作 移动光标 下棋和悔棋操作if(button==27)           //ESC的ASCLL码{if(MessageBox(NULL,TEXT("确定退出?"),TEXT(""),MB_ICONQUESTION|MB_OKCANCEL)==IDOK){system("cls");printf("\n             谢谢使用!\n");return 0;}}if(button==13)               //回车键ASCLL码     按下后开始判断输赢winner=Judge();if(winner!=0){goto_xy(15,24);if(winner==2){printf("恭喜!甲方赢!\n");}if(winner==1){printf("恭喜!乙方赢!\n");}}if(winner!=1&&winner!=2){continue;}goto_xy(13,22);printf("   继续游戏?(Y/N):    ");while(1){button=getch();if(button=='n'||button=='N'||button=='y'||button=='Y')break;}if(button=='n'||button=='N'){if(MessageBox(NULL,TEXT("  确定退出?"),TEXT(""),MB_ICONQUESTION|MB_OKCANCEL)==IDOK){system("cls");printf("\n                谢谢使用!\n");return 0;}}if(button=='y'||button=='Y'){winner=0;system("cls");break;}}}if(startchoice==2){if(MessageBox(NULL,TEXT("  确定退出?"),TEXT(""),MB_ICONQUESTION|MB_OKCANCEL)==IDOK){printf("\n\n                谢谢使用!\n");return 0;}}}return 0;
}

运行结果:

学习心得:

感觉好高能所以就保存发博文了,很多界面啥的搞不懂

小萝莉五子棋(高能绕行)相关推荐

  1. 当大叔爱上小萝莉我就爱上了正则表达式(一)

    当大叔爱上小萝莉我就爱上了正则表达式 正则表达式的含义 正则表达式是一种文本模式,包括普通字符(例如,a到z之间的字母)和特殊字符(称为"元字符").模式描述在搜索文本时要匹配的一 ...

  2. html网页制作看板娘原理,给网站添加 网页看板娘 效果 给网页添加一个可爱的小萝莉...

    今天遇到了点小问题,上百度搜问题,无意中看到了这个效果,就找了下,给大家分享一下. 效果如下图 鼠标进入网页,小萝莉会根据鼠标位置而发生变化,此效果是canvas来实现的 需要给自己网站添加,复制下方 ...

  3. 游戏建模:手绘暗黑小萝莉

    平时喜欢画画,最近呐再做一些个人作品.然后再A站各种淘原画,从一堆原画中挑选自己喜欢的,把它画成模型.然后发现选的原画每次都给自己挖了很多的坑. 在选这张原画的时候想的是,小萝莉卡哇伊.一身金闪闪发光 ...

  4. 关于《小萝莉的猴神大叔》些许体会

    周末随意点着看的一部电影<小萝莉的猴神大叔>,没想到给了自己意想不到的触动:久违的感动,久违的"热泪盈眶". 关于"猴神": 笑点演绎生活中的苦乐. ...

  5. 小萝莉说Crash(一):Unrecognized selector sent to instance xxxx

    写在前面的:分享一篇文,原文地址:小萝莉说Crash(一):Unrecognized selector sent to instance xxxx -------------------------- ...

  6. 小萝莉和他的数学迷老爸

    不知道大数据文摘的读者里有没有数学不好的姑娘?会不会希望有个数学超好的老爸,可以经常手把手耐心地教导自己?这里带来的是一组系列漫画,生动地描绘了小萝莉和她的数学迷老爸之间发生的故事. 其实育儿既是一个 ...

  7. 小萝莉说Crash(二): Unrecognized selector xxx 之 ForwardInvocation

    2015年不急不忙地到来,小萝莉为大家奉上新年礼包,祝大家新年快乐,希望开发GGMM们新一年的开发工作更加顺利.安心! 在上篇的分享中,小萝莉给大家介绍了一个入门必现的应用崩溃问题 -- Unreco ...

  8. 一只喵的西行记-11 与大叔小萝莉的不打不相识

    还记得曾经我们一起躲在窗户外面听一户人家传来的音乐吗?没记错的话,那首歌好像叫<Shape Of My Heart>.那时,我跳到窗台上盯着电视,一点点把看到的内容向你复述.那是一个杀手和 ...

  9. linux开源社区贡献代码,4岁小萝莉向Linux内核贡献代码修复「漏洞」而且代码已经合并到内核...

    最近国外社区 Reddit 上有个非常有趣的讨论 ,  在过去发布的Linux内核中有处代码改进是名4岁的小萝莉提交的. 这名小萝莉向内核提交代码以修复某处「漏洞」,这次代码修订还是在 2014 年发 ...

最新文章

  1. Google创始人公开信:AI暖春和黑暗面
  2. Nginx服务器编译添加SSL模块
  3. 团队角色测试(结果分析已公布)
  4. hive整合phoenix
  5. 语言中根号打法_知识的诅咒,数学老师在教学中不得不防的陷阱
  6. 实验四:用一维数组输出等腰三角形的杨辉三角
  7. cck8graphpad作图_北京cck8数据作图「上海儒安生物科技供应」
  8. Netty4 学习笔记之三:粘包和拆包
  9. win7系统如何重启服务器,云骑士解决win7系统重启IIS服务的技巧介绍
  10. html word页面展示,word文档怎样调页面
  11. 54元阿里云上建站详细步骤
  12. 7-1 换硬币(20 分)
  13. c语言将数据写入文件后乱码_C语言 文件写入输出。文件载入后输出是乱码,纠结啊!...
  14. 0005 键盘打字如何练成像黑客一样的飞速
  15. 前端高频面试题-场景题
  16. 研究了3天,终于将 Shader 移植到 Cocos Creator 2.2.0 上了
  17. java google map_java如何通过google map api实现地址解析
  18. 在Ubuntu系统下运行c语言程序
  19. button设置为disabled
  20. ACCESS+ADO学习记录一点点

热门文章

  1. 我的2019年工作总结及对未来1年的计划和期许
  2. 直播APP制作时即时聊天功能实现
  3. 吐血整理!程序员常见的几种变现方式!
  4. pyká Unlimited for Mac(项目管理软件)
  5. R语言重复测量方差分析
  6. docker使用和搭建
  7. A段架构设计_隽语集(IT+設計思考_1601)
  8. 七、基础教程-坐标轴(Axis)
  9. 关于applet小程序在浏览器上运行的备注
  10. 新加坡百吉生物获5亿元投资;武田中国总部/亚洲开发中心落户上海浦东 | 医药健闻...