双人五子棋对战(需要EasyX图像库)
2024-08-27 00:06:15
实训要做项目呐。天天坐在电脑面前累死了。最近题刷的少。大多数都挺水。就不挨个编辑发上来了。发发白天写的项目吧。可能好几天更一下。实训结束恢复正常。
这个游戏需要EasyX的图像库。有兴趣的可以下一个图像库运行一下玩玩~(虽然= =没LOL好玩2333333)
设计题目:双人五子棋对战单机游戏
使用C语言及VC绘图库,在VC环境下,设计一个双人五子棋对战单机游戏,双方各执黑白一子,黑白双方轮流落子,直到某一方首先在棋盘的横线、纵线或斜线上形成连续五子,则该方就算获胜,游戏过程可以悔棋一步。要求友好的图形化界面、方便操作。
功能设计要求
根据五子棋游戏规则,项目设计有以下几点要求:
- 输出游戏规则并由用户决定是否遵守并开局。
- 要求动态画出棋盘大小。
- 画棋子并确定其颜色。
- 提示下棋规则。
- 玩家轮流下棋。
- 判断谁先落棋。
- 允许且只允许悔棋一步。
- 判断每局游戏输赢,显示每局游戏的获胜者及分数。
- 判断是否进行下一局。
- 判最终赢家(三局两胜)。
#include<stdio.h>
#include<graphics.h>
#include<conio.h>
#define N 10
void gameover();
void MainFace();
int Game_Over1(int a[][],int chess_symbol )/* "-"形或者"|"形(事实上"-"与"|"关于"\"对称) */
{
int i,j,k,l,r;
for( i=; i < N; i++ )
for( k=; k < N-; k++ )
{
l=r=;
for( j=k; j < k+; j++ )
{
if( a[i][j] == chess_symbol )/* "-"形*/
l++;
if( a[j][i] == chess_symbol )/* "|"形*/
r++;
}
if( l == || r == )/*连续的个棋子在一条直线上时,游戏结束*/
return ; }
return ;
} int Game_Over2( int a[][] ,int chess_symbol )/* "\"形*/
{
int i,j,k,m,LeftDown,RightUp;
for( m=; m < N-; m++ )
for( k=; k < N--m; k++ )
{
RightUp=LeftDown=;
for( i=k ,j=k+m; i < k+; i++ ,j++ )
{
if( a[i][j] == chess_symbol )/* 对角线"\"上及其右上方的"\"形*/
RightUp++;
if( a[j][i] == chess_symbol )/* 对角线"\"上及其左下方的"\"形*/
LeftDown++;
}
if( RightUp == || LeftDown == )
return ;
}
return ;
}
int Game_Over3( int a[][] ,int chess_symbol )/* "/"形*/
{
int i,j,k,m,LeftUp,RightDown;
for( m=N-; m >= ; m-- )
for( k=; k < m + - ; k++ )
{
RightDown=LeftUp=;
for( i=k ,j= m - k; i < k+; i++ ,j-- )
{
if( a[i][j] == chess_symbol )/*对角线"/"上及其左上方的"/"形*/
LeftUp++;
if( a[N--j][N--i] == chess_symbol )/*对角线"/"上及其右下方的"/"形*/
RightDown++;
}
if( RightDown == || LeftUp == )
return ;
}
return ;
} typedef struct
{
UINT uMsg;
int x;
int y;
}m;
void main()
{
char k;
printf("请遵守游戏规则\nYes or No");
printf("请选择'y'or'n'\n");
scanf("%c",&k);
if(k=='y'||k=='Y') MainFace();
if(k=='n'||k=='N') {printf("感谢您的使用\n");gameover();}
}
void gameover()
{
getch();
closegraph();
} void MainFace()
{
int chess[N][N]={};
int i,x,y,j,r,n=;
int v[N];
char ch;
MOUSEMSG m;
initgraph(,);/*生成一个,区域*/
setbkcolor(LIGHTGRAY); cleardevice();/*背景设置为白色*/
setcolor(RED);/*画图颜色是红色*/
for(x=;x<=;x=x+)/*画棋盘格*/
{
line(x,,x,);
line(,x,,x);
}
while(true)/*响应鼠标操作*/
{
m = GetMouseMsg();
if(m.uMsg==WM_LBUTTONDOWN)
{
x=m.x%;if(x<=)m.x=m.x-x;else m.x=m.x+(-x);
y=m.y%;if(y<=)m.y=m.y-y;else m.y=m.y+(-y);
i=m.x/;j=m.y/;
if (chess[i][j]!=)/*防止在一个地方重复下棋子chess[i][j]==1 为白子 chess[i][j]==1 为黑子*/
continue;
if(n==)/*判断该谁下棋*/
{
setcolor(WHITE);
setfillstyle(WHITE);
fillcircle(m.x,m.y,);
/*fillellipse(m.x,m.y,10,10);*/
chess[i][j]=;
if(Game_Over1(chess,)==||Game_Over2(chess,)==||Game_Over3(chess,)==)
{
setcolor(BLACK);outtextxy(,,"此局白子胜利");
v[]++; if(v[]==)
{ outtextxy(,,"3局胜,白子胜局,白子胜出"); break;}
outtextxy(,,"是否继续下棋:Y OR N");
ch= getch();
if(ch=='N') break;
else{
for(i=;i<N;i++)
for(j=;j<N;j++)
chess[i][j]=;
setbkcolor(LIGHTGRAY); cleardevice();/*背景设置为白色*/
setcolor(RED);/*画图颜色是红色*/
for(x=;x<=;x=x+)/*画棋盘格*/
{ line(x,,x,);
line(,x,,x);
}
}
}
n=;/*换方下子*/
}
else
{
chess[i][j]=;
for(r=;r>=;r--)
{
setcolor(BLACK);
setfillstyle(BLACK);
fillcircle(m.x,m.y,r);
}
/*fillellipse(m.x,m.y,1,1); */
if(Game_Over1(chess,)==||Game_Over2(chess,)==||Game_Over3(chess,)==)
{
setcolor(BLACK);outtextxy(,,"此局黑子胜利"); v[]++;
if(v[]==){ outtextxy(,,"3局胜,黑子胜局,黑子胜出"); break;}
outtextxy(,,"是否继续下棋:Y OR N");
ch= getch();
if(ch=='N') break;
else{
for(i=;i<N;i++)
for(j=;j<N;j++)
chess[i][j]=;
setbkcolor(LIGHTGRAY); cleardevice();/*背景设置为白色*/
setcolor(RED);/*画图颜色是红色*/
for(x=;x<=;x=x+)/*画棋盘格*/
{ line(x,,x,);
line(,x,,x);
}
}
}
n=;
}
}
if(m.uMsg==WM_RBUTTONUP) break;/*右键结束*/
}
getch();
closegraph();
}
最新文章
- WCF学习目的
- Install Qt creator
- 源码解读—HashMap
- 慕课网-安卓工程师初养成-4-7 Java循环语句之 while
- C语言第一节 C语言程序与开发工具
- find &; rm
- ueditor .net设置步骤
- Hql没有limit,替换方案
- 中英文代码对比系列之Java一例
- webpack打包和gulp打包工具详细教程
- 服务管理之rsync
- 项目开发版本控制----Git
- c# 静态构造函数与私有构造函数共存
- C#实现Google S2算法
- vb中去掉string数组的一部分
- SD从零开始01-02
- Docker 私有registry出现的证书问题
- 关于maven工程打jar的问题
- Python学习---django重点之视图函数
- Halcon 笔记1