五子棋(完整版)

(我的信息学奥赛一本通帐号:njyz2023025)

话不多说,直接上代码

#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
#include<ctime>
using namespace std;
void gotoxy(int x,int y) {
COORD pos = {x,y};
HANDLE hOut =GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut,pos);
}
int mp[16][16]= {0},x1=0,x2=0; 
void print(int x) {
gotoxy(x,1);
cout<<"┬";
for(int i=2; i<=14; i++) {
gotoxy(x,i);
cout<<"┼";
}
gotoxy(x,15);
cout<<"┴";
}//输出棋盘的中间部分 
void gotoc() {
system("cls");
gotoxy(55,10);
cout<<"五 子 棋";
gotoxy(56,20);
cout<<"加载中...";
gotoxy(55,21);
cout<<"作者:李梓萱";
for(int j=0; j<100; j++) {
Sleep(17);
gotoxy(j+3,15);
cout<<" "<<j<<"%";
gotoxy(j,15);
cout<<"■";
}
system("cls");
for(int i=0; i<100; i++) {
for(int j=0; j<40; j++) {
gotoxy(i,j);
cout<<"■";
//SetColor(rand()%10);
}
}
system("cls");
}//加载界面函数 
int main() {
gotoc();//加载 
for(int i=2; i<=30; i+=2) {
gotoxy(i,0);
cout<<i/2;
}//横坐标 
for(int i=1; i<=15; i++) {
gotoxy(0,i);
cout<<i;
}//纵坐标 
gotoxy(2,1);
cout<<"┌";
for(int i=2; i<=14; i++) {
gotoxy(2,i);
cout<<"├";
}
gotoxy(2,15);
cout<<"└";//输出棋盘左侧 
for(int i=4; i<=28; i+=2) {
print(i);
}//用一个循环来输出棋盘中间部分 
gotoxy(30,1);
cout<<"┐";
for(int i=2; i<=14; i++) {
gotoxy(30,i);
cout<<"┤";
}
gotoxy(30,15);
cout<<"┘";//输出棋盘右侧
bool l=0;//没什么用的flag 
long long m=2;//这个很重要,用来判断是该白棋走还是黑棋走,每次走完++,每次判断是偶数,该白棋,是奇数,该黑棋(一般用flag判断,这是我个人喜好) 
gotoxy(0,17);
cout<<"游戏说明:白棋先走,落子请输入坐标,其他的不用我说了吧";//说明,一定要看 
while(l=1) {
gotoxy(32,16);
int x,y;
cin>>x>>y;//读入xy坐标 
gotoxy(32,16);
cout<<" ";
if(mp[x][y]!=0) { 
gotoxy(32,16);
cout<<"此位置已有落子!";
Sleep(1000);
gotoxy(32,16);
cout<<" ";
continue;
}//很重要,用来判断此位置有没有落子 
if(x>15&&y<=15) {
gotoxy(32,16);
cout<<"x坐标超出棋盘范围!";
Sleep(1000);
gotoxy(32,16);
cout<<" ";
continue;

if(y>15&&x<=15) {
gotoxy(32,16);
cout<<"y坐标超出棋盘范围!";
Sleep(1000);
gotoxy(32,16);
cout<<" ";
continue;
}
if(y>15&&x>15) {
gotoxy(32,16);
cout<<"x和y坐标均超出棋盘范围!";
Sleep(1000);
gotoxy(32,16);
cout<<" ";
continue;
}//以上三个if用来判断有没有超出棋盘大小 
gotoxy(x*2,y);
if(m%2==0) {//是偶数,该白棋 
cout<<"●";//输出棋子 
mp[x][y]=1;
//横坐标搜索有没有连成五个 
if(mp[x+1][y]==1&&mp[x+2][y]==1&&mp[x+3][y]==1&&mp[x+4][y]==1) {
gotoxy(32,16);
cout<<"白棋获胜!";
return 0;
}
if(mp[x-1][y]==1&&mp[x+1][y]==1&&mp[x+2][y]==1&&mp[x+3][y]==1) {
gotoxy(32,16);
cout<<"白棋获胜!";
return 0;
}
if(mp[x-2][y]==1&&mp[x-1][y]==1&&mp[x+1][y]==1&&mp[x+2][y]==1) {
gotoxy(32,16);
cout<<"白棋获胜!";
return 0;
}
if(mp[x-3][y]==1&&mp[x-2][y]==1&&mp[x-1][y]==1&&mp[x+1][y]==1) {
gotoxy(32,16);
cout<<"白棋获胜!";
return 0;
}
if(mp[x-4][y]==1&&mp[x-3][y]==1&&mp[x-2][y]==1&&mp[x-1][y]==1) {
gotoxy(32,16);
cout<<"白棋获胜!";
return 0;
}
//竖
if(mp[x][y+1]==1&&mp[x][y+2]==1&&mp[x][y+3]==1&&mp[x][y+4]==1) {
gotoxy(32,16);
cout<<"白棋获胜!";
return 0;
}
if(mp[x][y-1]==1&&mp[x][y+1]==1&&mp[x][y+2]==1&&mp[x][y+3]==1) {
gotoxy(32,16);
cout<<"白棋获胜!";
return 0;
}
if(mp[x][y-2]==1&&mp[x][y-1]==1&&mp[x][y+1]==1&&mp[x][y+2]==1) {
gotoxy(32,16);
cout<<"白棋获胜!";
return 0;
}
if(mp[x][y-3]==1&&mp[x][y-2]==1&&mp[x][y-1]==1&&mp[x][y+1]==1) {
gotoxy(32,16);
cout<<"白棋获胜!";
return 0;
}
if(mp[x][y-4]==1&&mp[x][y-3]==1&&mp[x][y-2]==1&&mp[x][y-1]==1) {
gotoxy(32,16);
cout<<"白棋获胜!";
return 0;
}
//斜'\'
if(mp[x+1][y+1]==1&&mp[x+2][y+2]==1&&mp[x+3][y+3]==1&&mp[x+4][y+4]==1) {
gotoxy(32,16);
cout<<"白棋获胜!";
return 0;
}
if(mp[x-1][y-1]==1&&mp[x+1][y+1]==1&&mp[x+2][y+2]==1&&mp[x+3][y+3]==1) {
gotoxy(32,16);
cout<<"白棋获胜!";
return 0;
}
if(mp[x-2][y-2]==1&&mp[x-1][y-1]==1&&mp[x+1][y+1]==1&&mp[x+2][y+2]==1) {
gotoxy(32,16);
cout<<"白棋获胜!";
return 0;
}
if(mp[x-3][y-3]==1&&mp[x-2][y-2]==1&&mp[x-1][y-1]==1&&mp[x+1][y+1]==1) {
gotoxy(32,16);
cout<<"白棋获胜!";
return 0;
}
if(mp[x-4][y-4]==1&&mp[x-3][y-3]==1&&mp[x-2][y-2]==1&&mp[x-1][y-1]==1) {
gotoxy(32,16);
cout<<"白棋获胜!";
return 0;
}
//斜'/'
if(mp[x-1][y+1]==1&&mp[x-2][y+2]==1&&mp[x-3][y+3]==1&&mp[x-4][y+4]==1) {
gotoxy(32,16);
cout<<"白棋获胜!";
return 0;
}
if(mp[x+1][y-1]==1&&mp[x-1][y+1]==1&&mp[x-2][y+2]==1&&mp[x-3][y+3]==1) {
gotoxy(32,16);
cout<<"白棋获胜!";
return 0;
}
if(mp[x+2][y-2]==1&&mp[x+1][y-1]==1&&mp[x-1][y+1]==1&&mp[x-2][y+2]==1) {
gotoxy(32,16);
cout<<"白棋获胜!";
return 0;
}
if(mp[x+3][y-3]==1&&mp[x+2][y-2]==1&&mp[x+1][y-1]==1&&mp[x-1][y+1]==1) {
gotoxy(32,16);
cout<<"白棋获胜!";
return 0;
}
if(mp[x+4][y-4]==1&&mp[x+3][y-3]==1&&mp[x+2][y-2]==1&&mp[x+1][y-1]==1) {
gotoxy(32,16);
cout<<"白棋获胜!";
return 0;
}
} else if(m%2==1) {
cout<<"○";
mp[x][y]=2;
//横
if(mp[x+1][y]==2&&mp[x+2][y]==2&&mp[x+3][y]==2&&mp[x+4][y]==2) {
gotoxy(32,16);
cout<<"黑棋获胜!";
return 0;
}
if(mp[x-1][y]==2&&mp[x+1][y]==2&&mp[x+2][y]==2&&mp[x+3][y]==2) {
gotoxy(32,16);
cout<<"黑棋获胜!";
return 0;
}
if(mp[x-2][y]==2&&mp[x-1][y]==2&&mp[x+1][y]==2&&mp[x+2][y]==2) {
gotoxy(32,16);
cout<<"黑棋获胜!";
return 0;
}
if(mp[x-3][y]==2&&mp[x-2][y]==2&&mp[x-1][y]==2&&mp[x+1][y]==2) {
gotoxy(32,16);
cout<<"黑棋获胜!";
return 0;
}
if(mp[x-4][y]==2&&mp[x-3][y]==2&&mp[x-2][y]==2&&mp[x-1][y]==2) {
gotoxy(32,16);
cout<<"黑棋获胜!";
return 0;
}
//竖
if(mp[x][y+1]==2&&mp[x][y+2]==2&&mp[x][y+3]==2&&mp[x][y+4]==2) {
gotoxy(32,16);
cout<<"黑棋获胜!";
return 0;
}
if(mp[x][y-1]==2&&mp[x][y+1]==2&&mp[x][y+2]==2&&mp[x][y+3]==2) {
gotoxy(32,16);
cout<<"黑棋获胜!";
return 0;
}
if(mp[x][y-2]==2&&mp[x][y-1]==2&&mp[x][y+1]==2&&mp[x][y+2]==2) {
gotoxy(32,16);
cout<<"黑棋获胜!";
return 0;
}
if(mp[x][y-3]==2&&mp[x][y-2]==2&&mp[x][y-1]==2&&mp[x][y+1]==2) {
gotoxy(32,16);
cout<<"黑棋获胜!";
return 0;
}
if(mp[x][y-4]==2&&mp[x][y-3]==2&&mp[x][y-2]==2&&mp[x][y-1]==2) {
gotoxy(32,16);
cout<<"黑棋获胜!";
return 0;
}
//斜'\'
if(mp[x+1][y+1]==2&&mp[x+2][y+2]==2&&mp[x+3][y+3]==2&&mp[x+4][y+4]==2) {
gotoxy(32,16);
cout<<"黑棋获胜!";
return 0;
}
if(mp[x-1][y-1]==2&&mp[x+1][y+1]==2&&mp[x+2][y+2]==2&&mp[x+3][y+3]==2) {
gotoxy(32,16);
cout<<"黑棋获胜!";
return 0;
}
if(mp[x-2][y-2]==2&&mp[x-1][y-1]==2&&mp[x+1][y+1]==2&&mp[x+2][y+2]==2) {
gotoxy(32,16);
cout<<"黑棋获胜!";
return 0;
}
if(mp[x-3][y-3]==2&&mp[x-2][y-2]==2&&mp[x-1][y-1]==2&&mp[x+1][y+1]==2) {
gotoxy(32,16);
cout<<"黑棋获胜!";
return 0;
}
if(mp[x-4][y-4]==2&&mp[x-3][y-3]==2&&mp[x-2][y-2]==2&&mp[x-1][y-1]==2) {
gotoxy(32,16);
cout<<"黑棋获胜!";
return 0;
}
//斜'/'
if(mp[x-1][y+1]==2&&mp[x-2][y+2]==2&&mp[x-3][y+3]==2&&mp[x-4][y+4]==2) {
gotoxy(32,16);
cout<<"黑棋获胜!";
return 0;
}
if(mp[x+1][y-1]==2&&mp[x-1][y+1]==2&&mp[x-2][y+2]==2&&mp[x-3][y+3]==2) {
gotoxy(32,16);
cout<<"黑棋获胜!";
return 0;
}
if(mp[x+2][y-2]==2&&mp[x+1][y-1]==2&&mp[x-1][y+1]==2&&mp[x-2][y+2]==2) {
gotoxy(32,16);
cout<<"黑棋获胜!";
return 0;
}
if(mp[x+3][y-3]==2&&mp[x+2][y-2]==2&&mp[x+1][y-1]==2&&mp[x-1][y+1]==2) {
gotoxy(32,16);
cout<<"黑棋获胜!";
return 0;
}
if(mp[x+4][y-4]==2&&mp[x+3][y-3]==2&&mp[x+2][y-2]==2&&mp[x+1][y-1]==2) {
gotoxy(32,16);
cout<<"黑棋获胜!";
return 0;
}
}
m++;
}
return 0;
}

  • 48
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
五子棋游戏 1.课程设计的目的 计算机技术的不断发展给人们的日常工作和生活都带来了许多益处, 从Windows系统的推出使电脑从高雅的学术殿堂走入了寻常百姓家开始,各行各业的人们 无须经过特别的训练就能够使用电脑完成许许多多复杂的工作。然而,虽然现在世界上 已经充满了花样繁多的各种软件,但它们依然不能满足用户的各种特殊需要,人们还不 得不开发适合自己特殊需求的软件。Java语言作为一种面向对象的编程语言,具有分布 式,可移植,高性能等特点。通过系统的学习,就可以使用它开发出功能齐全,满足特 殊需求的应用程序。它对学习者掌握技能,开拓思维都有很大的帮助。 Java语言开发方法是当今世界最流行的开发方法,是当今流行的网络编程语言。它 具有面向对象、跨平台、分布应用等特点。它不仅具有更贴近自然的语义,而且有利于 软件的维护和继承。很多程序开发人员得第一选择。为了将课堂上得知识掌握得更加透 彻,深刻把握Java语言的重要概念及其面向对象的特性,锻炼学生熟练的应用面向对象 的思想和设计方法解决实际问题的能力,开设了Java程序设计课程设计。让学生自己动 手动脑,将书本上得知识运用到实践当中去,使知识能更好得融会贯通。 通过自己动手,自主得学习,对Java这门课程有更深得了解与认识,并通过自己动手 ,自主得学习,对Java这门课程有更深得了解与认识,通过本次课设,实现本学期容的回 顾与综合运用,包括类的建立,用类创建对象,方法的调用,图形组建的使用方法,图 形界面的布局形式,事件处理机制,文件对话框的使用,文件操作的基本方法,数据读 写的基本用法等。 学习任何知识得目的都是要将它运用到实践中去,所以我们要运用已有的知识,独立 得将这个课程设计完成,只有这样,我们才能将知识变成本领,变成属于自己得东西, 通过一个学习得学习,我们已经有可一定得Java基础,现在我们就要利用这些基础,来 完成课程设计。 这次课程设计我主要研究了利用已学的Java知识编辑一个五子棋游戏。通过此次课 程设计,来巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、JCreato r等开发工具的运用,拓宽常用类库的应用。 2.设计方案论证 2.1设计思路 (1)棋盘界面设计 在对棋盘界面设计方面要考虑简洁友好,符合游戏者需求。棋子的设计方面系统中设 置了两种棋子颜色,yellow或者red, 游戏者可自行选择。棋子怎样画出来,怎样使棋子按我们所想的方式来绘制出来是设计 的主要难题。运行时要求当每次点击鼠标的时候就在点击鼠标的地方画一个棋子,所以 得定义一个棋子的类使点击鼠标时系统把棋子绘制出来。这样主界面里的棋子就确定了 ,而且也确定了几个所需要的类。可以先定义好这些类了。 有了以上的准备就可以把棋盘绘制出来了,下棋时每次在适当位置点击鼠标的时候就 在所点击的位置上画出你这个角色的颜色,然后计算机会自动的下棋,计算机自动下棋 要有一个控制变量来控制能不能下棋。人可以随意的下子,可是计算机就要计算在哪个 位置下子了。这里由计算机下子的算法来确定,人人对战的话就不象单机游戏一样,要 计算机来判断人下子之后计算机下那一个地方了,人人对战只要在双方下子的时候判断 赢棋情况,当然还要同步的控制两个人下棋的顺序,这样的话就要用到线程了,各自都 继承或实现线程类或接口,以便各自能随时单独控制接发消息。 (2)算法设计 对于五子棋游戏,无论人机对战,还是双人对战,都需要判断棋盘上是否存在五子连 珠情况,这既是游戏名字的由来,也是游戏结束的标志。判断五子连珠的原理是从横, 竖,左斜线,右斜线4条线上判断是否存在5个相连的同类棋子。 对战一方落子后,在该处向8个方向检测连续的同类棋子,如果检测到直线方向上存在5 个连续的同类棋子(包含本位置棋子),则判断为"连五"并结束检测循环。基于检测结 果,可以判断游戏是否结束,并根据获胜方的落子代码判断获胜方是谁。 由于不考虑禁手问题,在实现"连五"过程中,我们可以考虑完成"双四","四三","双三 ","冲四","活三","活四"来实现目的。 活四:有两个点能形成"连五"的四就是活四; 冲四:只有一个点能形成"连五"的四叫做"冲四",或者叫做"单四"; 活三:己方在落一子就能形成"活四"的三叫做"活三"。"活三"分为"连活三"和"跳活三" 。连活三:在棋盘某一条阳线或阴线上有同色三子相连,且在此三子两端延长线上有一 端至少有一个,另一端至少有两个无子的交叉点与此三子紧密相连。跳活三:中间仅间 隔一个无子交叉点的连三,但两端延长线均至少有一个无子的交叉点与此三子相连。 双三:由于黑方走一着在无子交叉点上同时形成二个或二个以上黑方 " 活 " 的局面。 双四:由于黑方走一着在无子交叉点上同时形成二个或二个以上黑方 " 四 " 的

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值