双人五子棋对战(需要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++ 制作一个简易的控制台时钟应用 简单的桌面截图代码: ///////////////////////////////////////////////// ...
随机推荐
- 【Stage3D学习笔记续】山寨Starling(五):纹理计算和尺寸计算
尺寸计算: Starling中的尺寸是以像素为单位的,这一切都得力于我们使用的正交矩阵,还记得我们顶点数据中的位置数据么,如果我们提交的矩形的四个顶点为(0, 0)(0, 100)(100, 0)(1 ...
- Java循环语句 for
语法: 特点:相比 while 和 do...while 语句结构更加简洁易读 例如,输出 1000 遍"我爱慕课网",使用 for 的实现代码为: 需要留心的几个小细节: 1. ...
- java图片处理
import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import ja ...
- android应用程序fps meter[帧数显示]的分析 —— 浅谈root的风险 (3)
上节已经详细说了下注入过程,最后寄生进程在宿主进程中下了个蛋,这下完的蛋有什么作用呢?接下来再具体分析一下. lib0的感染过程分析 对于本例注入的so动态库,首先看一下so的符号: $ readel ...
- linux设置tomcat开机自动启动
1.修改/etc/rc.d/rc.local,使用vi /etc/rc.d/rc.local 命令2.在/etc/rc.d/rc.local文件最后添加下面两行脚本 export JAVA_HOME= ...
- 【Android开发经验】使用Ant批量打包Android应用全然指南
本文章由Socks完毕.博客地址:http://blog.csdn.net/zhaokaiqiang1992 转载请说明. 折腾了一下午.百度了一下午,最终实现了使用Ant对Android应用的批量打 ...
- iOS开发——网络编程OC篇&(二)XMPP实现用户登录与注销
XMPP实现用户登录与注销 登录: 步骤: * 在AppDelegate实现登录 1. 初始化XMPPStream 2. 连接到服务器[传一个JID] 3. 连接到服务成功后,再发送密码授权 4. 授 ...
- EasyARM i.mx28学习笔记——开箱试用总结
0 前言 本月初(2014年8月)购买了周立功的EasyARM开发板,主控为EasyARM i.mx287.出于下面几个理由购买了该开发板. [1]主要原因,有人约我一起学习一起使用该 ...
- istringstream
编写程序,将来自一个文件中的行保存在一个vector<string>中,然后使用一个istringstream从vector读取数据成员,每次读取一个单词 #include <ios ...
- [Effective C++ --025]考虑写出一个不抛异常的swap函数
引言 在我的上一篇博客中,讲述了swap函数. 原本swap只是STL的一部分,而后成为异常安全性编程的脊柱,以及用来处理自我赋值可能性. 一.swap函数 标准库的swap函数如下: namespa ...