双人五子棋对战(需要EasyX图像库)
实训要做项目呐。天天坐在电脑面前累死了。最近题刷的少。大多数都挺水。就不挨个编辑发上来了。发发白天写的项目吧。可能好几天更一下。实训结束恢复正常。
这个游戏需要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();
}
双人五子棋对战(需要EasyX图像库)的更多相关文章
- js+html5双人五子棋(源码下载)
代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" c ...
- 基于Udp的五子棋对战游戏
引言 本文主要讲述在局域网内,使用c#基于Udp协议编写一个对战的五子棋游戏.主要从Udp的使用.游戏的绘制.对战的逻辑这三个部分来讲解. 开发环境:vs2013,.Net4.0,在文章的末尾提供源代 ...
- Python双人五子棋
这篇文章旨在介绍一个双人的五子棋程序.再次重申,本人不擅长对代码的可读性进行优化,所以可能有些杂乱(在所难免). 先瞅一眼效果图: 请注意,这个棋子--是这么圆润立体!本程序不需任何素材图片,完全用代 ...
- java swing 双人五子棋源代码
import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Toolkit; impo ...
- Linux网络编程10——使用UDP实现五子棋对战
思路 1. 通信 为了同步双方的棋盘,每当一方在棋盘上落子之后,都需要发送给对方一个msg消息,让对方知道落子位置.msg结构体如下: /* 用于发给对方的信息 */ typedef struct t ...
- C 语言控制台实现五子棋项目
花了一天时间实现了控制台五子棋项目,把项目贴上来.也算是告一段落了. 为了进一步了解C语言编程,熟悉优秀的编码风格,提升编码能力,丰富项目经验.所以在编程初期选择了控制台小游戏<单机五子棋> ...
- 微信小程序踩坑集合
1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=1476434678461 2:简易教程:https://mp.weixin.qq.com/debu ...
- js,jquery,css,html5特效
包含js,jquery,css,html5特效,源代码 本文地址:http://www.cnblogs.com/roucheng/p/texiao.html 2017新年快乐特效 jQuery最新最全 ...
- VC++ 实现简单的桌面截图
使用了EasyX图像库,使用方法请参考:VC++ 制作一个简易的控制台时钟应用 简单的桌面截图代码: ///////////////////////////////////////////////// ...
随机推荐
- Java循环语句 for
语法: 特点:相比 while 和 do...while 语句结构更加简洁易读 例如,输出 1000 遍"我爱慕课网",使用 for 的实现代码为: 需要留心的几个小细节: 1. ...
- .net 开发人员的瓶颈和职业发展
.net 开发人员的瓶颈和职业发展 现在社会比前几年浮躁了,越来越多的人抱怨薪水低,高薪工作不好找; 诚然这有CPI的压力,可是也有很多人没有认清自己的职业发展. 很多.net程序员个各种纠结,想拿高 ...
- 编写一个Animal类,具有属性:种类;具有功能:吃、睡。定义其子类Fish 和Dog,定义主类E,在其main方法中分别创建其对象并测试对象的特性。
package animal; public class Animal { //成员属性 private String kind; public String getKind() { return k ...
- PHP流程控制(二)
布尔型循环就是为真的时候执行,为假的时候停止 注意:1.循环能够节约大量的代码,提高重用性质2.循环,一定要有退出条件.3.While循环中,在while循环之前必须对变量进行初始化; 单层循环:语法 ...
- 远程重启IIS服务
方法一: $UserName = "administrator" $serverpass = "pass" $server = "10.4.19.60 ...
- cocos2dx 运动+旋转动画 CCSequence CCAnimation CCAnimate CCMoveTo CCCallFuncN
cocos2dx 动画是个非常奇妙的东西~~. 这里看到的是一个物体,在运动的过程中会不断地翻转的过程. 两个动画一起来~~ 以下的代码中涉及到:CCAnimation(补间动画 ) CCAnima ...
- 【23】宁以non-member、non-friend替换member函数
1.non-member方法与member方法没有本质区别,对于编译器来说,都是non-member方法,因为member方法绑定的对象,会被编译器转化为non-member方法的第一个形参.non- ...
- UIView上添加了一个按钮和一个单击手势的事件相应,互相不影响的处理方法。。
tapGesture.delegate = self; - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shoul ...
- [转]Log4Net中配置文件的解释
FROM:http://www.cnblogs.com/kissazi2/p/3392605.html 一个完整的配置文件的例子如下所示 <log4net> <!-- 错误日志类-- ...
- SAP TAX CODE 自动计算税金(BAPI_ACC_DOCUMENT_POST CALCULATE_TAX_FROM_GROSSAMOUNT)
CALL FUNCTION 'CALCULATE_TAX_FROM_GROSSAMOUNT' EXPORTING i_bukrs = ' "公司代码 i_mwskz = 'X1' " ...