双人五子棋对战(需要EasyX图像库)

实训要做项目呐。天天坐在电脑面前累死了。最近题刷的少。大多数都挺水。就不挨个编辑发上来了。发发白天写的项目吧。可能好几天更一下。实训结束恢复正常。

这个游戏需要EasyX的图像库。有兴趣的可以下一个图像库运行一下玩玩~(虽然= =没LOL好玩2333333)

设计题目:双人五子棋对战单机游戏

使用C语言及VC绘图库,在VC环境下,设计一个双人五子棋对战单机游戏,双方各执黑白一子,黑白双方轮流落子,直到某一方首先在棋盘的横线、纵线或斜线上形成连续五子,则该方就算获胜,游戏过程可以悔棋一步。要求友好的图形化界面、方便操作。

功能设计要求

根据五子棋游戏规则,项目设计有以下几点要求:

  1. 输出游戏规则并由用户决定是否遵守并开局。
  2. 要求动态画出棋盘大小。
  3. 画棋子并确定其颜色。
  4. 提示下棋规则。
  5. 玩家轮流下棋。
  6. 判断谁先落棋。
  7. 允许且只允许悔棋一步。
  8. 判断每局游戏输赢,显示每局游戏的获胜者及分数。
  9. 判断是否进行下一局。
  10. 判最终赢家(三局两胜)。
  1 #include<stdio.h>
  2 #include<graphics.h>
  3 #include<conio.h>
  4 #define N 10
  5 void gameover();
  6 void MainFace();
  7 int Game_Over1(int a[10][10],int chess_symbol )/* "-"形或者"|"形(事实上"-"与"|"关于"\"对称) */
  8 {
  9     int i,j,k,l,r;
 10     for( i=0; i < N; i++ )
 11         for( k=0; k < N-4; k++ )
 12         {
 13             l=r=0;
 14             for( j=k; j < k+5; j++ )
 15             {
 16                 if( a[i][j] == chess_symbol )/* "-"形*/
 17                     l++;
 18                 if( a[j][i] == chess_symbol )/* "|"形*/
 19                     r++;
 20             }
 21             if( l == 5 || r == 5 )/*连续的个棋子在一条直线上时,游戏结束*/
 22                 return 1;        }
 23         return 0;
 24 }
 25
 26
 27 int Game_Over2( int a[10][10] ,int chess_symbol )/* "\"形*/
 28 {
 29     int i,j,k,m,LeftDown,RightUp;
 30     for( m=0; m < N-4; m++ )
 31         for( k=0; k < N-4-m; k++ )
 32         {
 33             RightUp=LeftDown=0;
 34             for( i=k ,j=k+m;  i < k+5;  i++ ,j++ )
 35             {
 36                 if( a[i][j] == chess_symbol )/* 对角线"\"上及其右上方的"\"形*/
 37                     RightUp++;
 38                 if( a[j][i] == chess_symbol )/* 对角线"\"上及其左下方的"\"形*/
 39                     LeftDown++;
 40             }
 41             if( RightUp == 5 || LeftDown == 5 )
 42                 return 1;
 43         }
 44         return 0;
 45 }
 46 int Game_Over3( int a[10][10] ,int chess_symbol )/* "/"形*/
 47 {
 48     int i,j,k,m,LeftUp,RightDown;
 49     for( m=N-1; m >= 4; m-- )
 50         for( k=0; k < m + 1 - 4; k++ )
 51         {
 52             RightDown=LeftUp=0;
 53             for( i=k ,j= m - k;  i < k+5;  i++ ,j-- )
 54             {
 55                 if( a[i][j] == chess_symbol )/*对角线"/"上及其左上方的"/"形*/
 56                     LeftUp++;
 57                 if( a[N-1-j][N-1-i] == chess_symbol )/*对角线"/"上及其右下方的"/"形*/
 58                     RightDown++;
 59             }
 60             if( RightDown == 5 || LeftUp == 5 )
 61                 return 1;
 62         }
 63         return 0;
 64 }
 65
 66 typedef struct
 67 {
 68     UINT uMsg;
 69     int x;
 70     int y;
 71 }m;
 72 void main()
 73 {
 74     char k;
 75     printf("请遵守游戏规则\nYes or No");
 76     printf("请选择‘y‘or‘n‘\n");
 77     scanf("%c",&k);
 78     if(k==‘y‘||k==‘Y‘) MainFace();
 79     if(k==‘n‘||k==‘N‘)     {printf("感谢您的使用\n");gameover();}
 80 }
 81 void gameover()
 82 {
 83     getch();
 84     closegraph();
 85 }
 86
 87 void MainFace()
 88 {
 89     int chess[N][N]={0};
 90     int i,x,y,j,r,n=1;
 91     int v[N];
 92     char ch;
 93     MOUSEMSG m;
 94     initgraph(500,500);/*生成一个,区域*/
 95     setbkcolor(LIGHTGRAY);    cleardevice();/*背景设置为白色*/
 96     setcolor(RED);/*画图颜色是红色*/
 97     for(x=2;x<=502;x=x+50)/*画棋盘格*/
 98     {
 99         line(x,2,x,500);
100         line(2,x,500,x);
101     }
102     while(true)/*响应鼠标操作*/
103 {
104     m = GetMouseMsg();
105     if(m.uMsg==WM_LBUTTONDOWN)
106     {
107         x=m.x%50;if(x<=25)m.x=m.x-x;else m.x=m.x+(50-x);
108         y=m.y%50;if(y<=25)m.y=m.y-y;else m.y=m.y+(50-y);
109         i=m.x/50;j=m.y/50;
110         if (chess[i][j]!=0)/*防止在一个地方重复下棋子chess[i][j]==1 为白子            chess[i][j]==1 为黑子*/
111             continue;
112         if(n==1)/*判断该谁下棋*/
113         {
114             setcolor(WHITE);
115             setfillstyle(WHITE);
116             fillcircle(m.x,m.y,20);
117             /*fillellipse(m.x,m.y,10,10);*/
118             chess[i][j]=1;
119             if(Game_Over1(chess,1)==1||Game_Over2(chess,1)==1||Game_Over3(chess,1)==1)
120             {
121                 setcolor(BLACK);outtextxy(200,200,"此局白子胜利");
122                 v[0]++;     if(v[0]==2)
123                 { outtextxy(200,300,"3局胜,白子胜局,白子胜出");                       break;}
124                 outtextxy(250,250,"是否继续下棋:Y OR N");
125                 ch= getch();
126                 if(ch==‘N‘) break;
127                 else{
128                     for(i=0;i<N;i++)
129                         for(j=0;j<N;j++)
130                             chess[i][j]=0;
131                     setbkcolor(LIGHTGRAY);    cleardevice();/*背景设置为白色*/
132                     setcolor(RED);/*画图颜色是红色*/
133                     for(x=2;x<=502;x=x+50)/*画棋盘格*/
134                     {    line(x,2,x,500);
135                     line(2,x,500,x);
136                     }
137                 }
138             }
139             n=2;/*换方下子*/
140         }
141         else
142         {
143             chess[i][j]=2;
144             for(r=20;r>=0;r--)
145             {
146                 setcolor(BLACK);
147                 setfillstyle(BLACK);
148                 fillcircle(m.x,m.y,r);
149             }
150         /*fillellipse(m.x,m.y,1,1);    */
151         if(Game_Over1(chess,2)==1||Game_Over2(chess,2)==1||Game_Over3(chess,2)==1)
152         {
153             setcolor(BLACK);outtextxy(200,200,"此局黑子胜利");    v[1]++;
154             if(v[1]==2){ outtextxy(200,200,"3局胜,黑子胜局,黑子胜出");    break;}
155             outtextxy(250,250,"是否继续下棋:Y OR N");
156             ch= getch();
157             if(ch==‘N‘) break;
158             else{
159                 for(i=0;i<N;i++)
160                     for(j=0;j<N;j++)
161                         chess[i][j]=0;
162                 setbkcolor(LIGHTGRAY);    cleardevice();/*背景设置为白色*/
163                 setcolor(RED);/*画图颜色是红色*/
164                 for(x=2;x<=502;x=x+50)/*画棋盘格*/
165                 {    line(x,2,x,500);
166                 line(2,x,500,x);
167                 }
168             }
169         }
170         n=1;
171         }
172     }
173     if(m.uMsg==WM_RBUTTONUP) break;/*右键结束*/
174 }
175         getch();
176         closegraph();
177 }
时间: 2024-08-04 00:18:39

双人五子棋对战(需要EasyX图像库)的相关文章

java swing 双人五子棋源代码

import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Toolkit; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.image.BufferedImage; import javax.swing.JFrame; import javax.swing.

Linux网络编程10&mdash;&mdash;使用UDP实现五子棋对战

思路 1. 通信 为了同步双方的棋盘,每当一方在棋盘上落子之后,都需要发送给对方一个msg消息,让对方知道落子位置.msg结构体如下: /* 用于发给对方的信息 */ typedef struct tag_msg { int msg_type; /* 悔棋? */ int msg_color; int msg_row; int msg_col; }MSG, *pMSG; 2. 悔棋 用链表头插法来模拟栈,链表记录了双方下子的轨迹.结构如下: /* 记录每一步的轨迹 */ typedef stru

【Windows编程——API】双人五子棋

//windows.h文件中包含应用程序中所需的数据类型和数据结构的定义 #include <windows.h> #include <stdlib.h> #include <time.h> #include <string.h> #include <stdio.h> #include <math.h> #define PI acos(-1) LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, L

C语言 AI智能,五子棋 人机对战,人人对战

C语言五子棋,人机对战,人人对战 [email protected]:~$ cat main.c  # include<stdio.h> # include<string.h> # include<stdlib.h> # define SPA 0 # define MAN 1 # define COM 2    /* 空位置设为0 ,玩家下的位置设为1 ,电脑下的位置设为2 */ int qipan[15][15];    /* 15*15的棋盘 */ int a,b,

C 语言控制台实现五子棋项目

花了一天时间实现了控制台五子棋项目,把项目贴上来.也算是告一段落了. 为了进一步了解C语言编程,熟悉优秀的编码风格,提升编码能力,丰富项目经验.所以在编程初期选择了控制台小游戏<单机五子棋>作为项目进行编码. 本项目定位: 控制台小程序,作为熟悉一个完整的项目流程存在. 项目周期: 一星期. 实际时间: 一天.(2016年4月5日) 游戏功能: 首先实现能够让双人进行对战,最后得出胜负(结果).然后加入人机对战元素,也就是传统意义上一个人玩的单机游戏. 编码风格: C语言面向过程编程,变量名与

[源码和报告分享] 基于QT的网络五子棋游戏

系统采用当今广为流行的五子棋游戏为模版,利用C++的第三方GUI设计工具Qt为程序设计界面,并结合软件工程的思想开发一款基于网络的五子棋游戏对弈软件.本软件采用P2P的模式,利用一个服务端来辅助各个客户端之间的查找和链接,服务端用于记录当前各个客户端的游戏状态,并将实时更新的各个客户端的状态发送到其他客户端,方便客户端加入其他客户端建立的游戏主机,并建立P2P链接,进行游戏.客户端是玩家用于建立游戏主机或者加入游戏进行五子棋对弈的主程序,具有当今五子棋游戏常见的聊天功能.悔棋功能.认输功能.计分

微信小程序源码下载(200多个)

微信小程序源码下载汇总,点击标题进入对应的微信小程序下载页面. 最新 demo源码(点击标题进入帖子下载) 描述 1 微信小程序 会议室预定小程序 微信小程序 会议室预定小程序**** 本内容被作者隐藏 **** 2 微信小程序-双人五子棋小游戏 微信小程序-双人五子棋小游戏**** 本内容被作者隐藏 **** 3 打卡签到小程序 用微信小程序实现的一个简单的打卡签到的小程序拒绝 4 微信小程序---左滑删除 微信小程序---左滑删除**** 本内容被作者隐藏 **** 5 一个借钱的记事本的微

IOS 蓝牙(GameKit、Core Bluetooth)

GameKit的蓝牙开发注意 ● 只能用于iOS设备之间的连接 ● 只能用于同一个应用程序之间的连接 ● 最好别利用蓝牙发送比较大的数据 iOS中蓝牙的实现方案 ● iOS中提供了4个框架用于实现蓝牙连接 ● GameKit.framework(用法简单) ? 只能用于iOS设备之间的连接,多用于游戏(比如五子棋对战),从iOS7开始过期 ● MultipeerConnectivity.framework ? 只能用于iOS设备之间的连接,从iOS7开始引入,主要用于文件共享(仅限于沙盒的文 件

iOS开发 -GameKit蓝牙开发

蓝牙4.0 蓝牙4.0是2012年最新蓝牙版本,是3.0的升级版本:较3.0版本更省电.成本低.3毫秒低延迟.超长有效连接距离.AES-128加密等:通常用在蓝牙耳机.蓝牙音箱等设备上. 蓝牙技术联盟(Bluetooth SIG)2010年7月7日宣布,正式采纳蓝牙4.0核心规范(Bluetooth Core Specification Version 4.0 ),并启动对应的认证计划.会员厂商可以提交其产品进行测试,通过后将获得蓝牙4.0标准认证. 该技术拥有极低的运行和待机功耗,使用一粒纽扣