双人五子棋对战(需要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++ 制作一个简易的控制台时钟应用 简单的桌面截图代码: ///////////////////////////////////////////////// ...
随机推荐
- ASP.NET- 查找Repeater控件中嵌套的控件
如何在Repeater的HeaderTemplate和FooterTemplate模板中寻找控件?在Repeater的ItemTemplate模板中的控件,我们可以用Items属性来遍历行并用Find ...
- HTML5要点(一)
一.标签: <!-- -->:注释:cmd +/ <!DOCTYPE html><!--HTML5 专属版本声明标签(表明该页面使用HTML编写),代码最上层--> ...
- eclipse代码左虚线对齐设置
前言 : 前阵子看到同事的eclipse左边有虚线对齐.有点好奇~刚开始以为是装了神马插件, 于是百度了下, 貌似没有找着. 一怒之下,逗比了半个小时,终于探索出来了~~ 设置如下 : 点击confi ...
- c/c++中使用指针需要注意的问题
一.使用指针的时候需要注意几点: 分配空间 初始化 释放 二.常见的错误有几种: 1)内存分配未成功,却使用了它 编程新手常犯这种错误,因为他们没有意识到内存分配会不成功.常用解决办法是,使 ...
- Chord算法(原理)
Chrod算法是P2P中的四大算法之中的一个,是有MIT(麻省理工学院)于2001年提出,其它三大算法各自是: CAN Pastry Tapestry Chord的目的是提供一种能在P2P网络高速定位 ...
- 【35】考虑virtual方法以外的其他选择
1.使用Non-Virtual Interface 实现方法模版 将虚方法声明为private,子类重写private的虚方法,在父类中通过public方法调用虚方法.NVI的优点是:可以在虚方法之前 ...
- 文件I/O之/dev/fd
较新的系统都提供名为/dev/fd的目录,其目录项是名为0.1.2等的文件.打开文件/dev/fd/n等效于复制描述符n(假定描述符n是打开的). 在下列函数调用中: fd = open( " ...
- windows 7 共享,未授予用户在此计算机上的请求登录类型
刚刚重装了windows7,新下载的一个ghost版本,结果却不能共享,每次访问这台机器的共享都提示, 未授予用户在此计算机上的请求登录类型 这个情况好像是存在于win7访问win7,我用一台XP系统 ...
- Android 自学之进度条ProgressBar
进度条(ProgressBar)也是UI界面中的一种非常使用的组件,通常用于向用户显示某个耗时完成的百分比.因此进度条可以动态的显示进度,因此避免长时间地执行某个耗时操作时,让用户感觉程序失去了响应, ...
- java编程常用技术
一:将String字符串放在最前面 防止发生NullPointerException异常,我们通常把String字符串放在equals方法的左边来比较,这样可以有效的避免 空指针异常的发生. 第一种情 ...