双人五子棋对战(需要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++ 制作一个简易的控制台时钟应用 简单的桌面截图代码: ///////////////////////////////////////////////// ...
随机推荐
- centos 卸载自带的 java
一般情况下,我们都要将linux自带的OPENJDK卸载掉,然后安装SUN的JDK 首先:查看Linux自带的JDK是否已安装 <1># java -version ...
- 详解UML中的聚合,关联,泛化等关系
1. Overview UML设计类中,类的关系分为Generalization(泛化),Dependency(依赖关系).Association(关联关系).Aggregation(聚合关系).Co ...
- 重装系统后QQ聊天记录恢复方法
重装系统后QQ聊天记录恢复方法 近日又一次安装了系统,又一次安装了腾讯的.TM,TM也是安装在之前的文件夹底下,可是聊天记录和之前的自己定义表情都不见了,看来没有自己主动恢复回来. 我这里另一个特殊的 ...
- WIX在VS2012中如何制作中文安装包
WIX安装图文并茂简易说明一文中介绍了WIX安装包的制作过程,不过生成的是英文版的,如果需要制作中文版的安装包呢? 方法很简单,只需要两步. 1.增加中文UI的文件WixUI_zh-cn.wxl到工程 ...
- 一、 Socket之UDP异步传输文件
用SCOKET 发送文件是一个不太好处理的问题,网上的例子也都是很简单的,我准备写一个比较完善的例子,这个就算是开始吧,以后的都会在这个例子的基础上进行修改,准备实现多线程传输.断点传输和文件传输的完 ...
- git svn 5点区别
如果你在读这篇文章,说明你跟大多数开发者一样对GIT感兴趣,如果你还没有机会来试一试GIT,我想现在你就要了解它了. GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等.如果 ...
- java_jdbc_spring框架查询操作简例
1.添加commons-dbcp-1.4,commons-logging,commons-pool-1.2//线程池,commons.collections-3.2.1.jar,spring.jar ...
- 说说log4cplus
<C++ primer 第五版>已经翻了一段时间了,每天早上的班车上看一个小时.书是好书,可惜很多知识还是停留在表面上.每天除了翻书,一是也找到不合适的方法进一步深入,晚上看到新闻联播的老 ...
- 常用免费的WebServices地址
天气预报Web服务,数据来源于中国气象局 公用事业http://www.webxml.com.cn/WebServices/WeatherWebService.asmx 中国股票行情分时走势预览缩略图 ...
- Java基础知识强化之IO流笔记66:Properties的概述 和 使用(作为Map集合使用)
1. Properties的概述 Properties:属性集合类.是一个可以和IO流相结合使用的集合类. 该类主要用于读取以项目的配置文件(以.properties结尾的文件 和 xml文件). ...