五子棋游戏的设计说明书及源代码
c五子棋课设说明书含完整源代码解读
*******************实践教学***********************大学计算机与通信学院2016年春季学期C程序设计课程设计题目:五子棋游戏专业班级:16级物联网1班姓名:******__学号:1616520147指导教师:******成绩:摘要五子棋是一种两人对弈或者人机对弈的纯策略型棋类游戏,应用C语言编写程序可以在计算机上实现人机对弈五子棋功能。
人机对弈五子棋程序由开始界面,棋盘,判断胜负和计分等子程序构成;程序中应用了数组、全局变量、按键处理和图形编程等元素和语句。
程序通过棋盘和棋子图像生成、玩家移子与电脑判断分数高低而落子和判断胜负等功能的实现,在计算机上用VC++6.0实现了人机五子棋对弈。
关键词:C语言;VC++6.0目录摘要 (I)第1章序言 (1)1.1设计背景 (1)1.2设计目的 (1)第2章需求分析 (2)第3章程序总体设计 (3)3.1程序总体框架图 (3)3.2程序流程图 (4)第4章程序详细设计 (5)4.1各类头文件及自定义函数 (5)4.2棋盘数组 (5)4.3开始界面函数 (5)4.4棋盘界面函数 (5)4.5胜负判断函数 (6)4.6得分判断函数 (6)4.7主函数 (6)第5章系统测试 (7)5.1开始界面测试 (7)5.2棋盘界面测试 (8)5.3玩家输赢界面测试 (11)设计总结 (13)参考文献 (14)致谢 (155)附录(源代码) (166)第1章序言1.1 设计背景五子棋相传起源于四千多年前的尧帝时期,比围棋的历史还要悠久,可能早在“尧造围棋”之前,民间就已有五子棋游戏。
有关早期五子棋的文史资料与围棋有相似之处,因为古代五子棋的棋具与围棋是完全相同的。
在上古的神话传说中有“女娲造人,伏羲做棋”一说,《增山海经》中记载:“休舆之山有石焉,名曰帝台之棋,五色而文状鹑卵。
”李善注引三国魏邯郸淳《艺经》中曰:“棋局,纵横各十七道,合二百八十九道,白黑棋子,各一百五十枚”。
五子棋实验报告(含代码)
实验报告实验一五子棋游戏北方工业大学 2013级计算机技术米鹏一、实验原理及方法五子棋游戏开发借用Visual Studio 2012软件开发平台,选用C#语言进行编写。
整体程序主要分为三部分:界面操作部分、AI逻辑部分和棋子定点分析部分。
1、界面操作部分界面操作部分代码主要针对图像呈现、对应矩阵存储、下棋过程控制等可见的操作环节进编写。
同时负责整个程序的初始化工作。
图像呈现采用C#中Graphics进行绘制。
棋盘被划分为15行15列,每个划分出的小方格均为30*30的正方形,棋盘可操作的范围规定在(20,20)、(460,460)两点的确定的正方形区域内。
通过鼠标左击来确定下子地点。
程序会根据鼠标鼠标点击的位置进行计算,计算得到时对应矩阵的行列,之后再改变对应矩阵的内容后,在通过行列值乘以小方格边长计算得到在显示区域中的具体位置,再稍加变动后画到显示区域中。
以X点坐标为例,下面是计算X(Column)的流程图:在对应矩阵存储方面,后面AI逻辑和棋子分析所用到的矩阵都是来源这里。
同时AI 逻辑和棋子分析不能去修改对应矩阵内容。
图像呈现点的位置、重绘的根据都是来源这里。
在下棋过程控制方面采用信号亮的机制,当操作者下过后,根据信号AI会立即计算将要下点的位置同时改变信号亮变量。
当AI下过棋子后,由于信号亮的的限制就等待操作者去下棋,同时改变信号亮变量内容。
AI和操作者的所有下子、修改矩阵、显示棋子的过程都是统一的。
在每一盘游戏开始时程序会对一些重要的变量进行初始化这里包括矩阵、信号亮、第一步棋子颜色、呈现图像等内容进行初始化。
同时AI会在棋盘中央下第一子。
2、AI逻辑部分AI逻辑部分算是整个程序策略的灵魂。
其中的一些关键性判别的前后关系将影响AI 的下棋的结果。
同时加大和降低AI的难度也是这里。
下面是我设计的策略过程:从下棋者的考虑角度进行考虑,尽可能保证每一次下子都是有必要的、都是在情理当中的。
我所设计的策略并不是完整,漏洞在与没有考虑三棋子连续的情况。
程序设计课程设计五子棋实验报告(附代码)
程序设计课程设计报告书
1、引言
1.1 编写目的
学会 MFC 的一些基本操作,会使用其中的部分函数,编写一个五子连珠的小游戏, 游戏由两人对弈,用鼠标操作,执黑子者先下。
1.2 读者对象
计算机专业的学生或对编程感兴趣的学生
1.3 软件项目概述
项目名称:五子棋游戏 简称:五子棋 项目代号:无 软件项目的大致功能和性能要求
4、界面要求
人机界面要容易操作,有比较舒适的背景,遇到禁手、悔棋、保存、胜利 等可弹出对话框。人机交互和谐。
5、测试方案
1. 检验判断胜利:
6
程序设计课程设计报告书
若胜利,则弹出对话框,并显示是何种胜利 2. 检验禁手
7
程序设计课程设计报告书
以上仅列出六种禁手,当然还有跟多情况 3. 检验保存
当按下“保存”图标菜单时,会弹出对话框,可给棋局取个文件名,如“1” 然后单击“保存(S)” 4. 检验打开 重现打开游戏,按下“打开”图标菜单,现在打开“1” 会显示对话框,选择要打开的文件“1” 单击“打开”,则会复盘,显示上次未完成的游戏,继续对弈 5. 悔棋(有个撤销按钮,不便验收展示) 6. 综上,基本实现新局、保存棋局、打开棋局、悔棋、禁手、判断胜利
1.1 编写目的..............................................................................................................................4 1.2 读者对象..............................................................................................................................4 1.3 软件项目概述......................................................................................................................4 1.4 文档概述..............................................................................................................................4 1.5 定义......................................................................................................................................5 1.6 参考资料..............................................................................................................................5 2、任务概述....................................................................................................................................... 5 2.1 目标....................................................................................................................................... 5 2.2 软件的开发和运行环境.......................................................................................................5 2.3 用户特征..............................................................................................................................5 2.4 假设与约束..........................................................................................................................5 2.5 进度要求..............................................................................................................................5 2.6 验收要求...............................................................................................................................5 3、功能需求描述............................................................................................................................... 6 3.1 基本功能........................................................................................... 错误!未定义书签。 3.2 增加功能........................................................................................... 错误!未定义书签。 4、界面要求....................................................................................................................................... 6 5、测试方案....................................................................................................................................... 6 6、功能设计..................................................................................................................................... 10 6.1 类的关系描述.....................................................................................................................10 6.2 类的设计............................................................................................................................. 11 7、使用指南..................................................................................................................................... 11 8、维护接口..................................................................................................................................... 11 9、总结............................................................................................................................................. 12
课程设计模板C语言之五子棋附源代码
1. 键盘上事先设定8个按键,分作两组,每组四个,分别代表两个人用来控制棋 子的上下左右键。
2. 绘制棋盘,15条横线,15条竖线,在直线交点处下棋子(实心圆形)。 3. 黑子先行,黑白交替下子,在棋盘上设定一个与棋盘格大小边长相等的正方
形,初始状态,正方形的中心位于期盼的中心点。当一方欲走棋的时候,应 用四个按键来控制所要下棋的位置,每按一次按键,正方形都要向相应方向 移动一个格,但不能让其移出边界。当按下回车键时,应在正方形所在位置 放下一个棋子,然后此组按键不能操作,换另一个人下棋,用另一组按键, 规则同前。 4. 当任何一方有五个棋子沿着横,竖,斜连在一起时,系统自动判断赢棋,并 显示黑方或白方胜利。棋局结束后,任何一方均不能继续操作。 相关知识:图形绘制、音乐制作、键盘响应 功能扩充:(1)可以设置一个按键,用来悔棋。并且让喇叭发出某种声音,将要移
main()
screen()
InitGraph()
InitData()
DrawChessboard()
GamePlay()
closegraph()
ShowChess() Reminder()
MoveChess()
CheckWin()
GetNum()
ShowChess()
Refresh()
函数说明: 1. InitGraph():初始化图形,确认游戏能否正常运行。 2. InitData():初始化数据,设定棋盘坐标,棋子半径。 3. DrawChessboard():画棋盘,设定显示画面。 4. ShowChess()画棋子,并且填充棋子。 5. Reminder()提醒执该子棋手下棋。 6. GamePlay ()开始游戏的程序,里面包含选择退出,还是重新开始,还是继续进行。 7. MoveChess()使棋子能实现移动功能。 8. CheckWin()判断棋子能否赢的程序。 9. Refresh()更新画面,使刚下的棋子实现显示。 10.GetNum()用来数清各方向棋子数目。 11.Screen()画欢迎界面。 §2 模块划分 1.InitGraph()
java五子棋小游戏实验报告(附源代码)
手机五子棋游戏的设计与实现专业:姓名:班级:学号:指导教师:J2ME(Java 2 Micro Edition)是近年来随着各种不同设备,尤其是移动通信设备的飞速发展而诞生的一项开发技术。
它因其“write once,run anywhere”的Java特性而提高了开发的效率。
随着手机性能的不断提高,手机休闲娱乐应用将成为PC休闲娱乐应用之后又一重要业务增长点。
棋类游戏规则单一,比较适合在手机等便携终端推广。
由于具有跨平台、易于移植、占用空间小的优势,J2ME成为移动应用开发平台的主流,并提供了很多用以支持移动应用软件的开发的API。
现将该技术用于这次的手机游戏开发,可以实现游戏的快速开发,不但便于查看游戏运行过程中内存的占用量和程序的每一部分代码消耗了多少处理器时间,而且可以不断地优化代码,使代码具有高度的复用性、可扩展性、可维护性。
游戏的开发以J2ME为平台,利用Java技术,结合J2ME的MIDP技术,并对于程序设计思想,重要类、方法等展开讨论。
在对弈部分,分析设计走棋算法,选择合适的方式组织成代码,实现基本的人工智能。
过程中使用了J2ME中的CLDC/MIDP软件体系,主要运用了MID Profile的特定类的支持,来完成游戏的开发。
关键词:J2ME;CLDC;MIDPJ2ME is a kind of fast developing technology implemented on various devices especially mobile communication equipments. It improves the efficiency of the development process because of its "write once, run anywhere" nature. The development trend of the entertainment market based on the cell phone is very obvious because the handset performance enhances unceasingly. The entertainment market based on the cell phone will to be the new important business growth point follow the PC entertainment market. As the rules of a single chess game, it is more suitable for mobile phones and other portable terminal extension.J2ME has been the preferred platform for development because of its platform independent and compatibility, and provides a lot of APIs to support the development of mobile application software. The technology for mobile game development, can achieve the rapid development of the game. It is not only easy to observe the memory consumption and processor consumed time during the operation of the game, but also can optimize the code, so that the code has a high degree of reusability, scalability, maintainability.The game has designed by J2ME, the Java technology and the MIDP technology. I studied the procedure thought, the important class and the method. In the playing chess part, I have analyzed the algorithm, choosed the appropriate way to organize the code and realized the basic artificial intelligence. On the other hand,I learned software system of CLDC/MIDP and the specific class of the MID Profile to complete the game development.Key words: J2ME;CLDC;MIDP目录1 概述 (5)1.1 课题研究背景 (5)1.2 课题研究意义 (5)2 开发技术背景 (6)2.1 JAVA语言概述 (6)2.2 J2ME简介 (6)2.3 移动信息设备简表 (6)3 系统分析及总体设计 (7)3.1 可行性分析 (7)3.2 需求分析 (8)3.3 系统概要设计 (8)4 系统详细设计 (9)4.1 界面设计 (9)4.1.1 图形的低级绘制 (10)4.1.2 用户按键设计 (10)4.2 走棋算法 (11)4.3 胜负判断 (11)5 系统测试 (11)5.1 测试方案 (11)5.2 测试结果 (12)6总结 (13)基于J2ME的手机五子棋游戏的设计与实现1 概述1.1 课题研究背景五子棋是当前非常流行的一种棋。
五子棋游戏的设计说明书及源代码
*******************实践教学*******************软件学院2012年秋季学期C语言课程设计说明书题目:五子棋游戏的设计专业班级:姓名:学号:指导教师:成绩:目录目录 (I)摘要 (I)序言 (II)1、需求分析 (1)1.1总体分析 (1)1.2初始化 (1)1.3主循环控制模块 (1)1.4玩家下子 (1)1.5盘面分析填写棋型表 (2)1.6对方下子 (2)1.7胜负判断 (2)2、设计思路 (3)2.1五子棋的起源与发展 (3)2.2五子棋的基本术语及规则 (3)2.2.1五子棋的基本术语: (3)2.2.2五子棋的规则 (4)2.3功能描述 (5)3、详细设计 (6)3.1流程图 (6)4、运行调试与分析讨论 (7)4、运行调试与分析讨论 (8)4.1运行结果 (8)4.2分析讨论 (12)5、设计体会与小结 (13)5.1课设中的体会及小结 (13)参考文献 (14)致谢 (15)附录一源代码 (16)摘要游戏设计已经成为现在社会的一种热门行业。
五子棋是一种受大众广泛喜爱的游戏,其规则简单,变化多端,只需两人即可进行,非常富有趣味性和消遣性。
这里设计和实现了一个双人对下的黑白五子棋单机游戏。
主要应用了Visual C++编程来完成这个游戏的设计的。
本文主要介绍了本游戏开发环境Microsoft Visual C++ 6.0,使用当前优秀的开发工具VC++编程。
包含了五子棋程序的棋盘初始化、游戏规则、胜负判断方法,及帮助等。
关键词:五子棋;初始化;VC++编程;判断;单机游戏。
序言五子棋是起源于中国古代的传统黑白棋种之一,是一种训练人逻辑思维严密性的游戏。
该设计以五子棋游戏业务为背景,设计、开发一套“五子棋游戏”软件。
通过该题目的设计过程,可以提高基本编程能力和游戏开发的技巧,熟悉C语言图形模式下的编程。
本程序中涉及很多图形函数,包括:坐标定位;颜色设置(背景色和文本颜色设置),线条颜色、填充颜色;直线风格、文本风格、填充风格;画线、画圆、画矩形函数;图形系统的初始化和关闭;图形屏幕和文字屏幕的消除;从键盘获取键值等。
C++课程设计--五子棋游戏
C++课程设计--五子棋游戏课程设计说明书五子棋游戏The Game of Gobang学院名称:机械工程学院专业班级:测控10xx 学生姓名:江x 指导教师姓名:张xx 指导教师职称:副教授2012年6月目录第一章需求分析 (7)1.1系统概述 (7)1.1.1概述: (7)1.2系统运行环境 (7)1.2.1运行环境 (7)1.3功能需求描述 (7)1.3.1功能需求 (7)第二章总体设计 (8)2.1开发与设计的总体思想 (8)2.1.1总体设计思路 (8)2.1.2屏幕的组成 (9)2.1.3形状的组成 (9)2.1.4形状的统一 (10)第三章概要设计 (10)3.1系统流程图 (10)3.2 软件功能模块 (12)3.3 系统功能模块 (13)第四章详细设计 (13)4.1.界面的设计 (13)4.1.1总体界面的设计 (13)4.1.2界面棋子的设计 (13)4.2.显示界面的准备 (15)4.2.1在窗体类中添加存放黑白棋两维数组和背景棋盘、黑棋、白棋位图对象 (15)4.2.2 在窗体构造函数中初始化wb,装入棋盘、黑棋、白棋位图 (15)4.3. 显示棋盘和棋子代码 (15)4.4. 轮流下子代码 (16)4.5. 判断输赢 (19)4.5.1判断是否白棋胜代码 (19)4.5.2判断是否黑棋胜代码 (20)4.5.3判断是否平局代码 (21)4.6. 悔棋 (21)4.7. 重新开始 (22)4.8. 背景音乐 (23)4.9. 保存读取游戏文件 (23)4.9.1保存文件: (24)4.9.2读取文件: (25)第五章测试分析 (26)结论和心得体会 (27)致谢 (28)参考文献: (29)课程设计任务书一、课程设计目的课程设计是工科各专业的主要实践性教学环节之一,是围绕一门主要基础课或专业课,运用所学课程的知识,结合实际应用设计而进行的一次综合分析设计能力的训练。
课程设计旨在培养学生在本课程范围内,初步掌握解决实际应用问题时所应具有的查阅资料、综合运用所学知识的能力,为课程设计及今后从事专业工作打下基础。
c语言设计五子棋代码
c语言设计五子棋代码五子棋,亦称五目、五子、顺手拍子、连珠、下五子、悔棋、先手必胜等,是一种两人对弈的纯策略型棋类游戏。
通常用黑白两色的棋子在白色棋盘上进行游戏,以先把五个棋子连成一线者获胜。
实现五子棋游戏需要完成以下步骤:1. 棋盘的绘制2. 棋子的下落判断,包括判断是否胜利3. 玩家之间的交替下棋首先是棋盘的绘制。
采用二维数组来表示棋盘,用“+”、“-”、“|”等符号来绘制边框和交叉点。
同时还要用“ ”表示空白区域,用“●”和“○”代表黑白棋子。
然后是棋子的下落判断。
需要记录下棋子的位置,并判断落子是否在棋盘范围内,以及是否与已落下的棋子位置冲突。
在判断胜负时,需要遍历棋盘上所有的落子情况,检查是否存在连续的五个同色棋子。
最后是玩家之间的交替下棋。
可以使用一个计数器来记录当前下棋者,每次下完一子后,计数器加1,判断下一个下棋者,直到游戏结束为止。
下面是一份实现五子棋游戏的 C 代码:#include <stdio.h>#include <stdlib.h>#define ROW 15 // 棋盘行数#define COL 15 // 棋盘列数#define BLACK '●' // 黑色棋子#define WHITE '○' // 白色棋子#define SPACE ' ' // 空白区域char board[ROW][COL]; // 棋盘二维数组// 初始化棋盘void init_board() {for (int i = 0; i < ROW; i++) {for (int j = 0; j < COL; j++) {board[i][j] = SPACE;}}}// 打印棋盘void print_board() {for (int i = 0; i < ROW; i++) {for (int j = 0; j < COL; j++) {if (j == 0) printf("%2d ", i + 1); printf("%c ", board[i][j]);}printf("\n");}for (int i = 0; i < COL; i++) {if (i == 0) printf(" ");printf("%c ", 'A' + i);}printf("\n");}// 判断是否胜利int is_win(int row, int col, char ch) {int count = 1;// 判断横向for (int i = col - 1; i >= 0; i--) { if (board[row][i] == ch) {count++;} else {break;}}for (int i = col + 1; i < COL; i++) { if (board[row][i] == ch) {count++;} else {break;}}if (count >= 5) {return 1;}// 判断纵向count = 1;for (int i = row - 1; i >= 0; i--) { if (board[i][col] == ch) {count++;} else {break;}}for (int i = row + 1; i < ROW; i++) {if (board[i][col] == ch) {count++;} else {break;}}if (count >= 5) {return 1;}// 判断左上到右下斜向count = 1;for (int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) { if (board[i][j] == ch) {count++;} else {break;}}for (int i = row + 1, j = col + 1; i < ROW && j < COL; i++, j++) { if (board[i][j] == ch) {count++;} else {break;}}if (count >= 5) {return 1;}// 判断左下到右上斜向count = 1;for (int i = row + 1, j = col - 1; i < ROW && j >= 0; i++, j--) { if (board[i][j] == ch) {count++;} else {break;}}for (int i = row - 1, j = col + 1; i >= 0 && j < COL; i--, j++) { if (board[i][j] == ch) {count++;} else {break;}}if (count >= 5) {return 1;}return 0;}。
五子棋源代码(2)
设计题目:五子棋。
一、程序目的和功能实现图形用户界面的五子棋双人对战。
二、各个类的功能说明1.ChessPad面板类,用于绘制棋盘,实现用鼠标进行走棋的动作。
棋盘如下:关键代码:public void paint(Graphics g){for (int i=40;i<=400;i=i+20){g.drawLine(40,i,400,i);}for(int j=40;j<=400;j=j+20){g.drawLine(j,40,j,400);}g.fillOval(97,97,6,6);g.fillOval(337,97,6,6);g.fillOval(97,337,6,6);g.fillOval(337,337,6,6);g.fillOval(217,217,6,6);}定义鼠标在棋盘上的走棋,关键代码:public void mousePressed(MouseEvent e)//走棋2.ChessPoint_black画布类,绘制黑棋,实现黑棋的悔棋,关键代码:public void paint(Graphics g){g.setColor(Color.black);g.fillOval(0,0,18,18);}public void mousePressed(MouseEvent e){if(e.getModifiers()==InputEvent.BUTTON3_MASK){chesspad.remove(this);chesspad.棋子颜色=1;chesspad.i--;chesspad.text_3.setText("这是第"+chesspad.i+"步");chesspad.text_2.setText("");chesspad.text_1.setText("请黑棋下子");}}3.ChessPoint_white画布类,绘制白棋,实现白棋的悔棋,关键代码与ChessPoint_black类似。
JAVA课程设计 五子棋(内附完整代码)
JAVA课程设计设计题目:五子棋游戏一.简要的介绍五子棋1.五子棋的起源五子棋,又被称为“连五子、五子连、串珠、五目、五目碰、五格、五石、五法、五联、京棋”。
五子棋相传起源于四千多年前的尧帝时期,比围棋的历史还要悠久,可能早在“尧造围棋”之前,民间就已有五子棋游戏。
有关早期五子棋的文史资料与围棋有相似之处,因为古代五子棋的棋具与围棋是完全相同的。
2.现在五子棋标准棋盘(如图所示)3.五子棋的棋子五子棋采用两种颜色棋子,黑色棋子和白色棋子,和围棋相同,4.五子棋规则五子棋就是五个棋子连在一起就算赢,黑棋先行,下棋下在棋盘交叉线上,由于黑棋先行,优势太大,所以对黑棋设了禁手,又规定了“三手交换”,就是黑棋下第 2 手棋,盘面第 3 着棋之后,白方在应白 2 之前,如感觉黑方棋形不利于己方,可出交换,即执白棋一方变为执黑棋一方。
和“五手两打法”,就是黑棋在下盘面上关键的第 5 手时,必须下两步棋,让白方在这两步棋中任选一步,然后再续下。
不过一般爱好者不需要遵循这么多规则。
二.程序流程三.代码设计与分析main方法创建了ChessFrame类的一个实例对象(cf),并启动屏幕显示显示该实例对象。
public class FiveChessAppletDemo {public static void main(String args[]){ChessFrame cf = new ChessFrame();cf.show();}}用类ChessFrame创建五子棋游戏主窗体和菜单import java.awt.*;import java.awt.event.*;import java.applet.*;import javax.swing.*;import java.io.PrintStream;import javax.swing.JComponent;import javax.swing.JPanel;class ChessFrame extends JFrame implements ActionListener { private String[] strsize={"标准棋盘","改进棋盘","扩大棋盘"}; private String[] strmode={"人机对战","人人对战"};public static boolean iscomputer=true,checkcomputer=true; private int width,height;private ChessModel cm;private MainPanel mp;构造五子棋游戏的主窗体public ChessFrame() {this.setTitle("五子棋游戏");cm=new ChessModel(1);mp=new MainPanel(cm);Container con=this.getContentPane();con.add(mp,"Center");this.setResizable(false);this.addWindowListener(new ChessWindowEvent());MapSize(14,14);JMenuBar mbar = new JMenuBar();this.setJMenuBar(mbar);JMenu gameMenu = new JMenu("游戏");mbar.add(makeMenu(gameMenu, new Object[] {"开局", null,"棋盘",null,"模式", null, "退出"}, this));JMenu lookMenu =new JMenu("外观");mbar.add(makeMenu(lookMenu,new Object[] {"类型一","类型二","类型三"},this));JMenu helpMenu = new JMenu("版本");mbar.add(makeMenu(helpMenu, new Object[] {"关于"}, this));}构造五子棋游戏的主菜单public JMenu makeMenu(Object parent, Object items[], Object target){ JMenu m = null;if(parent instanceof JMenu)m = (JMenu)parent;else if(parent instanceof String)m = new JMenu((String)parent);elsereturn null;for(int i = 0; i < items.length; i++)if(items[i] == null)m.addSeparator();else if(items[i] == "棋盘"){JMenu jm = new JMenu("棋盘");ButtonGroup group=new ButtonGroup();JRadioButtonMenuItem rmenu;for (int j=0;j<strsize.length;j++){rmenu=makeRadioButtonMenuItem(strsize[j],target);if (j==0)rmenu.setSelected(true);jm.add(rmenu);group.add(rmenu);}m.add(jm);}else if(items[i] == "模式"){JMenu jm = new JMenu("模式");ButtonGroup group=new ButtonGroup();JRadioButtonMenuItem rmenu;for (int h=0;h<strmode.length;h++){rmenu=makeRadioButtonMenuItem(strmode[h],target);if(h==0)rmenu.setSelected(true);jm.add(rmenu);group.add(rmenu);}m.add(jm);}elsem.add(makeMenuItem(items[i], target));return m;}构造五子棋游戏的菜单项public JMenuItem makeMenuItem(Object item, Object target){ JMenuItem r = null;if(item instanceof String)r = new JMenuItem((String)item);else if(item instanceof JMenuItem)r = (JMenuItem)item;elsereturn null;if(target instanceof ActionListener)r.addActionListener((ActionListener)target);return r;}构造五子棋游戏的单选按钮式菜单项public JRadioButtonMenuItem makeRadioButtonMenuItem(Object item, Object target){JRadioButtonMenuItem r = null;if(item instanceof String)r = new JRadioButtonMenuItem((String)item);else if(item instanceof JRadioButtonMenuItem)r = (JRadioButtonMenuItem)item;elsereturn null;if(target instanceof ActionListener)r.addActionListener((ActionListener)target);return r;}public void MapSize(int w,int h){setSize(w * 24, h * 27);if(this.checkcomputer)this.iscomputer=true;elsethis.iscomputer=false;mp.setModel(cm);mp.repaint();}public boolean getiscomputer(){return this.iscomputer;}public void restart(){int modeChess = cm.getModeChess();if(modeChess <= 3 && modeChess >= 0){cm = new ChessModel(modeChess);MapSize(cm.getWidth(),cm.getHeight());}}public void actionPerformed(ActionEvent e){String arg=e.getActionCommand();try{if (arg.equals("类型三"))UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");else if(arg.equals("类型二"))UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");elseUIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel" );SwingUtilities.updateComponentTreeUI(this);}catch(Exception ee){}if(arg.equals("标准棋盘")){this.width=14;this.height=14;cm=new ChessModel(1);MapSize(this.width,this.height);SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("改进棋盘")){this.width=18;this.height=18;cm=new ChessModel(2);MapSize(this.width,this.height);SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("扩大棋盘")){this.width=22;this.height=22;cm=new ChessModel(3);MapSize(this.width,this.height);SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("人机对战")){this.checkcomputer=true;this.iscomputer=true;cm=new ChessModel(cm.getModeChess());MapSize(cm.getWidth(),cm.getHeight());SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("人人对战")){this.checkcomputer=false;this.iscomputer=false;cm=new ChessModel(cm.getModeChess());MapSize(cm.getWidth(),cm.getHeight());SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("开局")){restart();}if(arg.equals("关于"))JOptionPane.showMessageDialog(null, "第一版", "版本",JOptionPane.PLAIN_MESSAGE );if(arg.equals("退出"))System.exit(0);}}用类ChessModel实现了整个五子棋程序算法的核心import java.awt.*;import java.awt.event.*;import java.applet.*;import javax.swing.*;import java.io.PrintStream;import javax.swing.JComponent;import javax.swing.JPanel;class ChessModel {规定棋盘的宽度、高度、棋盘的模式private int width,height,modeChess;规定棋盘方格的横向、纵向坐标private int x=0,y=0;棋盘方格的横向、纵向坐标所对应的棋子颜色,数组arrMapShow只有3个值:1,2,3,-1,其中1代表该棋盘方格上下的棋子为黑子,2代表该棋盘方格上下的棋子为白子,3代表为该棋盘方格上没有棋子,-1代表该棋盘方格不能够下棋子private int[][] arrMapShow;交换棋手的标识,棋盘方格上是否有棋子的标识符private boolean isOdd,isExist;public ChessModel() {}该构造方法根据不同的棋盘模式(modeChess)来构建对应大小的棋盘public ChessModel(int modeChess){this.isOdd=true;if(modeChess == 1){PanelInit(14, 14, modeChess);}if(modeChess == 2){PanelInit(18, 18, modeChess);}if(modeChess == 3){PanelInit(22, 22, modeChess);}}按照棋盘模式构建棋盘大小private void PanelInit(int width, int height, int modeChess){ this.width = width;this.height = height;this.modeChess = modeChess;arrMapShow = new int[width+1][height+1];for(int i = 0; i <= width; i++){for(int j = 0; j <= height; j++){arrMapShow[i][j] = -1;}}}获取是否交换棋手的标识符public boolean getisOdd(){return this.isOdd;}设置交换棋手的标识符public void setisOdd(boolean isodd){ if(isodd)this.isOdd=true;elsethis.isOdd=false;}获取某棋盘方格是否有棋子的标识值public boolean getisExist(){return this.isExist;}获取棋盘宽度public int getWidth(){return this.width;}获取棋盘高度public int getHeight(){return this.height;}获取棋盘模式public int getModeChess(){return this.modeChess;}获取棋盘方格上棋子的信息public int[][] getarrMapShow(){return arrMapShow;}判断下子的横向、纵向坐标是否越界private boolean badxy(int x, int y){if(x >= width+20 || x < 0)return true;return y >= height+20 || y < 0;}计算棋盘上某一方格上八个方向棋子的最大值,这八个方向分别是:左、右、上、下、左上、左下、右上、右下public boolean chessExist(int i,int j){if(this.arrMapShow[i][j]==1 || this.arrMapShow[i][j]==2)return true;return false;}判断该坐标位置是否可下棋子public void readyplay(int x,int y){if(badxy(x,y))return;if (chessExist(x,y))return;this.arrMapShow[x][y]=3;}在该坐标位置下棋子public void play(int x,int y){if(badxy(x,y))return;if(chessExist(x,y)){this.isExist=true;return;}elsethis.isExist=false;if(getisOdd()){setisOdd(false);this.arrMapShow[x][y]=1;}else{setisOdd(true);this.arrMapShow[x][y]=2;}}计算机走棋说明:用穷举法判断每一个坐标点的四个方向的的最大棋子数,最后得出棋子数最大值的坐标,下子public void computerDo(int width,int height){int max_black,max_white,max_temp,max=0;setisOdd(true);System.out.println("计算机走棋 ...");for(int i = 0; i <= width; i++){for(int j = 0; j <= height; j++){算法判断是否下子if(!chessExist(i,j)){判断白子的最大值max_white=checkMax(i,j,2);判断黑子的最大值max_black=checkMax(i,j,1);max_temp=Math.max(max_white,max_black);if(max_temp>max){max=max_temp;this.x=i;this.y=j;}}}}setX(this.x);setY(this.y);this.arrMapShow[this.x][this.y]=2;}记录电脑下子后的横向坐标public void setX(int x){this.x=x;}记录电脑下子后的纵向坐标public void setY(int y){this.y=y;}获取电脑下子的横向坐标public int getX(){return this.x;}获取电脑下子的纵向坐标public int getY(){return this.y;}计算棋盘上某一方格上八个方向棋子的最大值,这八个方向分别是:左、右、上、下、左上、左下、右上、右下public int checkMax(int x, int y,int black_or_white){ int num=0,max_num,max_temp=0;int x_temp=x,y_temp=y;int x_temp1=x_temp,y_temp1=y_temp;判断右边for(int i=1;i<5;i++){x_temp1+=1;if(x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white)num++;elsebreak;}判断左边x_temp1=x_temp;for(int i=1;i<5;i++){x_temp1-=1;if(x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}if(num<5)max_temp=num;判断上面x_temp1=x_temp;y_temp1=y_temp;num=0;for(int i=1;i<5;i++){y_temp1-=1;if(y_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}判断下面y_temp1=y_temp;for(int i=1;i<5;i++){y_temp1+=1;if(y_temp1>this.height)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}if(num>max_temp&&num<5)max_temp=num;判断左上方x_temp1=x_temp;y_temp1=y_temp;num=0;for(int i=1;i<5;i++){x_temp1-=1;y_temp1-=1;if(y_temp1<0 || x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}判断右下方x_temp1=x_temp;y_temp1=y_temp;for(int i=1;i<5;i++){x_temp1+=1;y_temp1+=1;if(y_temp1>this.height || x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}if(num>max_temp&&num<5)max_temp=num;判断右上方x_temp1=x_temp;y_temp1=y_temp;num=0;for(int i=1;i<5;i++){x_temp1+=1;y_temp1-=1;if(y_temp1<0 || x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}判断左下方x_temp1=x_temp;for(int i=1;i<5;i++){x_temp1-=1;y_temp1+=1;if(y_temp1>this.height || x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}if(num>max_temp&&num<5)max_temp=num;max_num=max_temp;return max_num;}判断胜负public boolean judgeSuccess(int x,int y,boolean isodd){ int num=1;int arrvalue;int x_temp=x,y_temp=y;if(isodd)arrvalue=2;elsearrvalue=1;int x_temp1=x_temp,y_temp1=y_temp;判断右边胜负for(int i=1;i<6;i++){x_temp1+=1;if(x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue)num++;elsebreak;}判断左边胜负x_temp1=x_temp;for(int i=1;i<6;i++){x_temp1-=1;break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}if(num==5)return true;判断上方胜负x_temp1=x_temp;y_temp1=y_temp;num=1;for(int i=1;i<6;i++){y_temp1-=1;if(y_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}判断下方胜负y_temp1=y_temp;for(int i=1;i<6;i++){y_temp1+=1;if(y_temp1>this.height)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}if(num==5)return true;判断左上胜负x_temp1=x_temp;y_temp1=y_temp;num=1;for(int i=1;i<6;i++){y_temp1-=1;if(y_temp1<0 || x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}判断右下胜负x_temp1=x_temp;y_temp1=y_temp;for(int i=1;i<6;i++){x_temp1+=1;y_temp1+=1;if(y_temp1>this.height || x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}if(num==5)return true;判断右上胜负x_temp1=x_temp;y_temp1=y_temp;num=1;for(int i=1;i<6;i++){x_temp1+=1;y_temp1-=1;if(y_temp1<0 || x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}判断左下胜负x_temp1=x_temp;y_temp1=y_temp;for(int i=1;i<6;i++){x_temp1-=1;y_temp1+=1;if(y_temp1>this.height || x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue)num++;elsebreak;}if(num==5)return true;return false;}赢棋后的提示public void showSuccess(JPanel jp){JOptionPane.showMessageDialog(jp,"你赢了","结果",RMATION_MESSAGE);}输棋后的提示public void showDefeat(JPanel jp){JOptionPane.showMessageDialog(jp,"你输了","结果",RMATION_MESSAGE);}}用类MainPanel主要完成如下功能:1、构建一个面板,在该面板上画上棋盘;2、处理在该棋盘上的鼠标事件(如鼠标左键点击、鼠标右键点击、鼠标拖动等)import java.awt.*;import java.awt.event.*;import java.applet.*;import javax.swing.*;import java.io.PrintStream;import javax.swing.JComponent;import javax.swing.JPanel;class MainPanel extends JPanelimplements MouseListener,MouseMotionListener{设定棋盘的宽度和高度private int width,height;private ChessModel cm;根据棋盘模式设定面板的大小MainPanel(ChessModel mm){cm=mm;width=cm.getWidth();height=cm.getHeight();addMouseListener(this);}根据棋盘模式设定棋盘的宽度和高度public void setModel(ChessModel mm){cm = mm;width = cm.getWidth();height = cm.getHeight();}根据坐标计算出棋盘方格棋子的信息(如白子还是黑子),然后调用draw方法在棋盘上画出相应的棋子public void paintComponent(Graphics g){super.paintComponent(g);for(int j = 0; j <= height; j++){for(int i = 0; i <= width; i++){int v = cm.getarrMapShow()[i][j];draw(g, i, j, v);}}}根据提供的棋子信息(颜色、坐标)画棋子public void draw(Graphics g, int i, int j, int v){ int x = 20 * i+20;int y = 20 * j+20;画棋盘if(i!=width && j!=height){g.setColor(Color.darkGray);g.drawRect(x,y,20,20);}画黑色棋子if(v == 1 ){g.setColor(Color.gray);g.drawOval(x-8,y-8,16,16);g.setColor(Color.black);g.fillOval(x-8,y-8,16,16);}画白色棋子if(v == 2 ){g.setColor(Color.gray);g.drawOval(x-8,y-8,16,16);g.setColor(Color.white);g.fillOval(x-8,y-8,16,16);}if(v ==3){g.setColor(Color.cyan);g.drawOval(x-8,y-8,16,16);}}响应鼠标的点击事件,根据鼠标的点击来下棋,根据下棋判断胜负等public void mousePressed(MouseEvent evt){int x = (evt.getX()-10) / 20;int y = (evt.getY()-10) / 20;System.out.println(x+" "+y);if (evt.getModifiers()==MouseEvent.BUTTON1_MASK){cm.play(x,y);System.out.println(cm.getisOdd()+" "+cm.getarrMapShow()[x][y]); repaint();if(cm.judgeSuccess(x,y,cm.getisOdd())){cm.showSuccess(this);evt.consume();ChessFrame.iscomputer=false;}判断是否为人机对弈if(ChessFrame.iscomputer&&!cm.getisExist()){puterDo(cm.getWidth(),cm.getHeight());repaint();if(cm.judgeSuccess(cm.getX(),cm.getY(),cm.getisOdd())){ cm.showDefeat(this);evt.consume();}}}}public void mouseClicked(MouseEvent evt){}public void mouseReleased(MouseEvent evt){}public void mouseEntered(MouseEvent mouseevt){}public void mouseExited(MouseEvent mouseevent){}public void mouseDragged(MouseEvent evt){}响应鼠标的拖动事件public void mouseMoved(MouseEvent moveevt){int x = (moveevt.getX()-10) / 20;int y = (moveevt.getY()-10) / 20;cm.readyplay(x,y);repaint();}}import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;响应退出窗口class ChessWindowEvent extends WindowAdapter{public void windowClosing(WindowEvent e){System.exit(0);}ChessWindowEvent(){}}四.程序调试与运行运行:标准棋盘改进棋盘:扩大棋盘:外观类型二:外观类型三:人机对战:结果:五.结论通过对五子棋游戏的编写,使自己对java语言有了更深的了解。
五子棋游戏的论文及源代码
本科生课程论文论文题目五子棋游戏五子棋游戏【摘要】为了设计人人对弈模式的五子棋游戏系统,采用了C语言函数模块化程序设计方法,利用Visual C++ 6.0编译器运行游戏,实现一方执白棋,一方执黑棋,通过屏幕上的文字提示,轮流走棋,最先使五子相连一方获胜的人人对弈功能。
通过本程序的训练,加深对C 语言的了解,掌握五子棋游戏开发的基本原理,从而为以后的程序开发奠定基础。
【关键字】五子棋函数设计目的:本程序旨在进一步训练学生游戏开发的技巧,掌握C语言图形模式下的编程。
本程序设计很多图形函数,包括坐标定位;颜色设置(背景色和文本颜色设置)、线条颜色、填充颜色;直线风格、文本风格、填充风格;画线、画圆、画矩形函数;PC扬声器的打开、延迟、关闭;图形系统的初始化和关闭;图形屏幕和文字屏幕的清除;从键盘获取键值等。
功能:实现界面的初始化功能、下棋功能、胜负判断功能和帮助功能。
1)初始化功能。
程序初始化屏幕和棋盘,默认Player1先行。
2)实现下棋功能。
程序能实现下棋操作,在下棋过程中能随时退出。
3)胜负判断。
程序能对下棋的结果进行判断,分出胜负,并显示获胜信息。
4)显示帮助信息。
程序能提示玩家轮到哪方下棋了。
问题分析:首先要实现五子棋的行棋功能,在程序中可以通过坐标来定位棋子的位置,用不同的字符表示黑白棋子,并通过变量的交替实现黑白棋子的交替显示。
另一个难点就是对于胜负的判断,这需要通过循环函数的嵌套使用,难点在于逻辑调理的把握,循环之间的对应关系。
还有一个难点就是在游戏中能随时返回主菜单,这需要一个选择结构来实现,将主菜单的程序编入主函数,在得到特定指令时返回主函数,从而返回主菜单。
下棋过程中对于不断地输入坐标,可以用一个死循环来是实现,在特定的条件下退出循环,返回主函数。
程序设计:一、主要函数介绍本程序主要用到了main ()[1]、startGame()、printState()、judge()、help()、aboutThanks()等函数。
c语言-五子棋游戏-代码-源代码-解释
C语言教程:简易五子棋程序收集于网络/* 纯用字符和数组编的五子棋,棋盘也是用字符画的。
、编了1上午了,主要是算法跟按键比较烦,发现有bug-- 按键速度过快会产生延时显示,可能是算法不好。
操作:玩家1:a,s,w,d(方向)空格(落子)玩家2:上、下、左、右回车(落子)ESC:退出编译测试环境:`*/#include <>#include <>#include <>#include <>/#define CRRU 0xbf /*右上角点197*/#define CRLU 0xda /*左上角点218*/#define CRLD 0xc0 /*左下角点192*/#define CRRD 0xd9 /*右下角点217*/<#define CRL 0xc3 /*左边195*/#define CRR 0xb4 /*右边190*/#define CRU 0xc2 /*上边194*/#define CRD 0xc1 /*下边193*/#define CR 0xc5 /*十字交叉点197*/-#define size 19char a[size][size];int i,j; int x=10;int y=3; return ;}void pressct(int m){switch(m){¥case 19200: //左if(i>0) {i--;x--;gotoxy(x,y);} break;case 20480: //下if(j<size-1){j++;y++;gotoxy(x,y);} break;case 18432: //上$if(j>0) {j--;y--;gotoxy(x,y);} break;case 19712: //右if(i<size-1){i++;x++;gotoxy(x,y);} break;case 7181: //回车if(a[i][j]!=CB&&a[i][j]!=CW){a[i][j]=CW;putch(CW);gotoxy(x,y);side=1;}break; {default: break;}return ;}>int judge(int pa) //判断是否胜利,胜利则返回1,否则返回0;// 其中i,j为当前的落子位;{int m;int sum=1;for(m=1;m<=i&&m<=j;m++) {if(a[i-m][j-m]!=pa) break;sum++;}for(m=1;m<(size-i)&&m<(size-j);m++) {if(a[i+m][j+m]!=pa) break;sum++;}if(sum>=5) return 1;else sum=1;for(m=1;m<=i;m++) {if(a[i-m][j]!=pa) break;sum++;}for(m=1;m<(size-j);m++) {if(a[i+m][j]!=pa) break;sum++;}if(sum>=5) return 1;else sum=1;for(m=1;m<=j;m++) {if(a[i][j-m]!=pa) break;sum++;}for(m=1;m<(size-j);m++) {if(a[i][j+m]!=pa) break;sum++;}if(sum>=5) return 1;else sum=1;for(m=1;m<=i&&m<(size-j);m++) {if(a[i-m][j+m]!=pa) break;sum++;}for(m=1;m<(size-i)&&m<=j;m++) {if(a[i+m][j-m]!=pa) break;sum++;}if(sum>=5) return 1;else return 0;本文章来自21视频教程网C语言教程:简易五子棋程序_C语言程序设计教程原文链接:。
五子棋游戏 C语言 代码 源代码
#include <stdio.h>#include <stdlib.h>#define m 30int main (void){int count;//计数器算横纵行的结果int w,h;int u;int l;int i,size;//i声明步数。
size声明int r[m][m] = {0};//数组声明(棋子位置)int x, y;//声明落子坐标int n;//声明棋盘大小nchar a[20],b[20];printf ("请输入棋盘大小n\n");//编辑棋盘直到棋盘长度宽度大于4小于30 scanf ("%d", &n);if (n<=4 || n>m){do{printf ("输入的棋盘大小:4<n<%d\n", m);scanf ("%d", &n);}while (n<=4 || n>m);}getchar ();//声明玩家printf ("请输入玩家1姓名:\n");gets(a);printf ("请输入玩家2姓名:\n");gets(b);for ( i = 1, size = n*n;i <= size; i++)//编辑棋盘{if (i%2 == 1)//如果i能被2整除,为玩家a相关信息{do//玩家a棋子信息{printf ("%s该你下棋了,第%d个棋子\n", a, i);scanf ("%d%d", &x, &y);if (x > n || x < 0)//判断坐标是否在棋盘内,如果不是则重新输入{do{printf ("0<=横坐标<=%d请重新输入横坐标\n", n);scanf ("%d", &x);}while (x>m || x<0);}if (y > n || y < 0)//判断坐标是否在棋盘内,如果不是则重新输入{do{printf ("0<=纵坐标<=%d请重新输入纵坐标\n", n);scanf ("%d", &y);}while (y < 0 || y > n);}}while ((r[x][y] == 1 && (printf ("这个位置上已经有棋子了,请重新输入\n")))|| r[x][y] == 2&& (printf ("这个位置上已经有棋子了,请重新输入\n")) );r[x][y] = 1;for (u = 0;u < n; u++)//不同情况下判断玩家a获胜方式{for (l = 0;l < n;l++){count = 0;for (w = u,h = l;r[w][h] == 1 && h < n; h++)count++;if (count == 5){printf ("%s是胜利者\n", a);goto e;//直接跳转,其余代码不在运行count = 0;for (w = u, h = l; r[w][h] == 1 && w < n; w++)count ++;if (count == 5){printf ("%s是胜利者\n", a);goto e;}count = 0;for (w = u,h = l; r[w][h] == 1 && w < n && h<n;w++,h++)count++;if (count == 5){printf ("%s是胜利者\n", a);goto e;}count = 0;for (w =u ,h =l;r[w][h] == 1 && h > 0;h--)count++;if (count == 5){printf ("%s是胜利者\n", a);goto e;}}}}system("cls");for (int j = n;j>=0;j--){printf ("%-2d", j);for (int k = 0;k < n;k++)//画棋盘,声明两玩家棋子图片{if (r[k][j] == 0)printf ("╋");else if(r[k][j] == 1)printf ("○");else if (r[k][j] == 2)printf ("●"); }printf ("\n");}printf (" ");for (int k = 0;k < n;k++)printf ("%-2d", k);}else if (i%2 == 0)//如果i不能被2整除,为玩家b相关信息{do{printf ("\n%s该你下棋了,第%d个棋子\n", b, i);scanf ("%d%d", &x, &y);if (x > n || x < 0){do{printf ("0<=横坐标<=%d请重新输入横坐标\n", n);scanf ("%d", &x);}while (x>n || x<0);}if (y >n|| y < 0){do{printf ("0<=纵坐标<=%d请重新输入纵坐标\n", n);scanf ("%d", &y);}while (y < 0 || y > n);}}while ((r[x][y] == 1 && (printf ("这个位置上已经有棋子了,请重新输入\n")))|| r[x][y] == 2&& (printf ("这个位置上已经有棋子了,请重新输入\n")) );r[x][y] = 2;system("cls");for (int j = n;j>=0;j--){printf ("%-2d", j);for (int k = 0;k < n;k++){if (r[k][j] == 0)printf ("╋");else if(r[k][j] == 1)printf ("○");else if (r[k][j] == 2)printf ("●");}printf ("\n");}printf (" ");for (int k = 0;k < n;k++)printf ("%-2d", k); printf ("\n");count = 0;for (u = 0;u < n; u++){for (l = 0;l < n;l++){count = 0;for (w = u,h = l;r[w][h] == 2 && h < n; h++)count++;if (count == 5){printf ("%s是胜利者\n", b);goto e;}count = 0;for (w = u, h = l; r[w][h] == 2 && w < n; w++)count ++;if (count == 5){printf ("%s是胜利者\n", b);goto e;}count = 0;for (w = u,h = l; r[w][h] == 2 && w < n && h<n;w++,h++)count++;if (count == 5){printf ("%s是胜利者\n", b);goto e;}count = 0;for (w =u ,h =l;r[w][h] == 2 && h > 0;h--)count++;if (count == 5){printf ("%s是胜利者\n", b);goto e;}}}}}e: for (int j = n;j>=0;j--)//游戏结束界面棋盘固定重新显示{printf ("%-2d", j);for (int k = 0;k < n;k++){if (r[k][j] == 0)printf ("╋");else if(r[k][j] == 1)printf ("○");else if (r[k][j] == 2)printf ("●");}printf ("\n");}printf (" ");for (int k = 0;k < n;k++)printf ("%-2d", k); printf ("\n");printf ("\a游戏愉快,Powered by Techmessager\n");//结束语句return 0;}。
C语言课程设计五子棋源代码_+设计报告
C语言程序设计综合实验设计报告题目:班级;人数:小组成员:时间:目录1 课程设计报告1.1课题描述1.2需求分析1.3概要设计2源程序代码3详细设计1.课题设计报告1.1课题分析:游戏介绍:在一个18*18的方格中下棋,两个玩家,根据键盘上的上、下、左、右键及W、S、A、D来控制棋的走向,空格键及回车键表示确定棋子的落下位置,两个玩家为交替下棋,如果于其中任何一家下的五个棋子能够练成一线那么为胜者,游戏结束。
1 、五子棋是两个人之间进行的竞技活动,开始是由P1先下,把棋落在方框内,然后P2下,如此下棋直到一方在棋盘的横,竖,斜将同色的五个棋子连成一条线,则此方获胜。
游戏由玩家决定继续或结束。
1.2需求分析(1)在游戏开始时出现一个欢迎的界面同时介绍了游戏的规则;(2)画出棋盘的大小;(3)画棋子并确定棋子的大小;(4)判断键盘输入哪个键执行操作;(5)玩家P1先落棋;(6)玩家轮流下棋;(7)判断赢家。
(8)由玩家决定是否继续新游戏。
1.3 概要设计(1)功能模块2. 主流程图五子棋游戏初始化模块下棋操作模块 判断胜负模块 帮助模块 开始 欢迎界面帮助信息画出18*18棋盘遇到的一个问题:图形一闪而过解决方法因为Win-TC 的图形驱动程序EGAVGA.BGI 文件安装路径为c:\\Win-TC\\projects int gdriver=DETECT, gmode;initgraph(&gdriver, &gmode, "c:\\tc")改为initgraph(&gdriver, &gmode, "c:\\Win-TC\\projects")2程序代码#include <bios.h>#include "stdio.h"#include "graphics.h"/*定义1号玩家的操作键键码*/ 定义数组a[X] [Y ]设置初始点设置为(240,170),调用p1move函数,调用p2move函数Enter SpaceESC 用WIN函数判断胜负 游戏结束#define W 0x1177/*上移--'W'*/#define S 0x1f73/*下移--'S'*/#define A 0x1e61/*左移--'A'*/#define D 0x2064/*右移--'D'*/#define SP 0x3920/*落子--空格键*//*定义2号玩家的操作键键码*/#define UP 0x4800/*上移--方向键up*/#define DOWN 0x5000/*下移--方向键down*/#define LEFT 0x4b00/*左移--方向键left*/#define RIGHT 0x4d00/*右移--方向键right*/#define ENTER 0x1c0d/*落子--回车键Enter*/#define ESC 0x011b#define X (getx()-140)/20 /*将棋盘上光标所在点的横坐标X转化为0-18的数*/ #define Y (gety()-70)/20 /*将棋盘上光标所在点的横坐标Y转化为0-18的数*/int k,w=DETECT,gmode,j,i;int a[20][20];void p1move(); /*定义函数*/void p2move();void win();p1win();p2win();yellow();white();black();heqi();welcome();help();csz();qipang();p1turn();p2turn();p1del();p1turn()/*画左上角的白棋*/{setcolor(7);setfillstyle(1,7);circle(60,110,9);floodfill(60,110,7);}p1del() /*将左上角白棋檫去*/ {setfillstyle(1,14);floodfill(60,110,14);}p2turn() /*画右上角的黑棋*/ {setcolor(0);setfillstyle(1,0);circle(578,115,9);floodfill(578,115,0);}p2del() /*画右上角的黑棋*/ {setfillstyle(1,14);floodfill(578,115,14);}white() /*在当前位置画白棋*/ {setcolor(7);setfillstyle(1,7);circle(getx(),gety(),9); floodfill(getx(),gety(),7); }black() /*在当前位置画黑棋*/ {setcolor(0);setfillstyle(1,0);circle(getx(),gety(),9); floodfill(getx(),gety(),0); }yellow() /*补棋盘的颜色*/ {setcolor(6);setfillstyle(1,6);circle(getx(),gety(),9);floodfill(getx(),gety(),6);setcolor(15);line(getx()-9,gety(),getx()+9,gety());line(getx(),gety()+9,getx(),gety()-9);}qipang() /*画棋盘*/{ setfillstyle(1,6);bar(120,50,520,450);setfillstyle(1,14);bar(540,50,620,150);bar(20,50,100,150);for(k=0;k<19;k++){moveto(140+20*k,70);linerel(0,360);moveto(140,70+20*k);linerel(360,0);}moveto(240,170);setcolor(5);settextstyle(3,0,4);outtextxy(50,60,"P1");outtextxy(560,60,"P2");}welcome() /*欢迎界面*/{ initgraph(&w ,&gmode,"c:\\Win-TC\\projects") ; clearviewport();setcolor(4);settextstyle(0,0,6);outtextxy(180,180,"Welcome");settextstyle(0,0,2);outtextxy(280,440,"press any key to begin");delay(1000) ; /*delay(1000000000) ; delay(1000000000) ; */ }help() /*帮助界面*/{initgraph(&w ,&gmode,"c:\\Win-TC\\projects");clearviewport();setcolor(4);settextstyle(0,0,2);outtextxy(80,100,"P1 move; 'W S A D' ");outtextxy(80,120," set : space ");outtextxy(80,180,"P2 move: up down left right ");outtextxy(80,200," set: Enter");outtextxy(80,280,"Whoever is first to gather five ");/*same color pieces in a line without any different color piece among them,then he win */ outtextxy(80,300,"same color pieces in a line without");outtextxy(80,320,"any different color piece among ");outtextxy(80,340,"them, then he win.");outtextxy(80,360,"When you want to quit the game,");outtextxy(80,380,"press Esc.");outtextxy(220,440,"press any key to continue");while(bioskey(1)==0);}p1win() /*玩家1获胜界面*/{initgraph(&w ,&gmode,"c:\\Win-TC\\projects") ;clearviewport();setcolor(4);settextstyle(0,0,6);outtextxy(180,180,"P1 WIN");settextstyle(0,0,2);outtextxy(280,440,"press any key to begin");while(bioskey(1)==0);main();}p2win() /*玩家2获胜界面*/{clearviewport();setcolor(4);settextstyle(0,0,6);outtextxy(180,180,"P2 WIN");settextstyle(0,0,2);outtextxy(280,440,"press any key to begin");while(bioskey(0)!=0) main();}heqi() /*和棋界面*/{clearviewport();setcolor(4);settextstyle(0,0,6);outtextxy(180,180,"tie");settextstyle(0,0,2);outtextxy(280,440,"press any key to begin");while(bioskey(0)!=0) main();}csz() /*将所在位置的A[X][Y]赋初值6*/{for(i=0;i<19;i++)for(j=0;j<19;j++){a[i][j]=6;}}void win() /*判断输赢*/{int sum1,sum2,sum3,sum4,sum=0,n,i,j;for(i=X-4,j=Y-4,n=0;i<=X,j<=Y;i++,j++,n-=2){sum1=a[i][Y]+a[i+1][Y]+a[i+2][Y]+a[i+3][Y]+a[i+4][Y];sum2=a[i][j]+a[i+1][j+1]+a[i+2][j+2]+a[i+3][j+3]+a[i+4][j+4];sum3=a[X][j]+a[X][j+1]+a[X][j+2]+a[X][j+3]+a[X][j+4];sum4=a[i][j+8+n]+a[i+1][j+7+n]+a[i+2][j+6+n]+a[i+3][j+5+n]+a[i+4][j+4+n]; if(sum1==5||sum2==5||sum3==5||sum4==5)p2win();if (sum1==0||sum2==0||sum3==0||sum4==0)p1win(); }for(i=0;i<18;i++)for(j=0;j<18;j++)sum=sum+a[i][j];if(sum<181)heqi();}void p1move() /*玩家1的移动*/{switch(bioskey(0)){case ESC: {closegraph(); exit(0);}/*如果按键为ESC就退出游戏*/case SP:/*落子*/if(a[X][Y]==6) {p1del();p2turn();a[X][Y]=0;white();win(); p2move();}else p1move();case A: /*向左移*/if(a[X][Y]==0){if(getx()==140) moveto(520,gety());moverel(-20,0);white();}else if(a[X][Y]==1){if(getx()==140) moveto(520,gety());black();moverel(-20,0);white();} else{ yellow();if(getx()==140) moveto(520,gety());moverel(-20,0);white();} p1move();case D: /*向右移*/if(a[X][Y]==0) {if(getx()==500) moveto(120,gety());moverel(20,0);white();}else if(a[X][Y]==1) {if(getx()==500) moveto(120,gety());black();moverel(20,0);white();}else { yellow();if(getx()==500) moveto(120,gety());moverel(20,0);white();}p1move();case W: /*向上移*/if(a[X][Y]==0) {if(gety()==70) moveto(getx(),450);moverel(0,-20);white();}else if(a[X][Y]==1) {if(gety()==70) moveto(getx(),450);black();moverel(0,-20);white();}else { yellow();if(gety()==70) moveto(getx(),450);moverel(0,-20);white();}p1move();case S: /*向下移*/if(a[X][Y]==0) {if(gety()==430) moveto(getx(),50);moverel(0,20);white();}else if(a[X][Y]==1) {if(gety()==430) moveto(getx(),50);black();moverel(0,20);white();}else { yellow();if(gety()==430) moveto(getx(),50);moverel(0,20);white(); } p1move();default: p1move();}}void p2move() /*玩家2的移动*/{switch(bioskey(0)) /*如果按键为ESC就退出游戏*/{case ESC: {closegraph(); exit(0);}case ENTER: /*落子*/if(a[X][Y]==6) {p2del();p1turn();a[X][Y]=1;black();win();p1move();}else p2move();case LEFT: /*向左移*/if(a[X][Y]==1) {if(getx()==140) moveto(520,gety());moverel(-20,0);black();}else if(a[X][Y]==0) {if(getx()==140) moveto(520,gety());if(getx()==140) moveto(500,gety());white();moverel(-20,0);black();}else { yellow();if(getx()==140) moveto(520,gety());moverel(-20,0);black();} p2move();case RIGHT: /*向右移*/if(a[X][Y]==1) {if(getx()==500) moveto(120,gety());moverel(20,0);black();}else if(a[X][Y]==0) {if(getx()==500) moveto(120,gety());white();moverel(20,0);black();}else { yellow();if(getx()==500) moveto(120,gety());moverel(20,0);black();}p2move();case UP: /*向上移*/if(a[X][Y]==1) {if(gety()==70) moveto(getx(),450);moverel(0,-20);black();}else if(a[X][Y]==0) {if(gety()==70) moveto(getx(),450);white();moverel(0,-20);black();}else { yellow();if(gety()==70) moveto(getx(),450);moverel(0,-20);black();}p2move();case DOWN: /*向下移*/if(a[X][Y]==1) {if(gety()==430) moveto(getx(),50);moverel(0,20);black();}else if(a[X][Y]==0) {if(gety()==430) moveto(getx(),50);white();moverel(0,20);black();}else {if(gety()==430) moveto(getx(),50); yellow();moverel(0,20);black();}p2move();default: p2move();}}main() /*主函数*/{ welcome(); /*调用欢迎界面*/help(); /*调用帮助界面*/initgraph(&w ,&gmode,"c:\\Win-TC\\projects") ; /*清屏*/clearviewport();csz();qipang(); /*调用棋盘*/p1move(); /*调用玩家1的移动*/p2move();getch();}3详细设计1部分:以下是我负责的模块的函数,由于个人水平问题,我只负责画图部分。
c++MFC五子棋_说明书
(面向对象程序设计)设计说明书MFC五子棋起止日期: 2012 年 12 月 30 日至 2013 年 01 月 05 日学生姓名*******班级********学号**********成绩指导教师 (签字)计算机与通信学院(部)年月日目录一、绪论 (2)1.1课题背景 (2)1.2需求分析 (2)2.1游戏流程 (2)2.2系统功能结构图 (3)三、详细设计 (4)3.1.1游戏界面的制作 (4)3.1.2游戏开始 (5)3.1.3游戏结束 (6)3.1.4排行榜 (7)3.2核心算法 (7)四、用户使用说明 (9)4.1游戏开始 (9)4.2游戏中 (9)4.3结束 (10)五、附录 (11)参考资料 (11)一、绪论1.1课题背景本课程设计是C++面向对象程序设计的重要的实践环节之一,是在学生学习完《C++面向对象程序设计》课程后进行的一次全面的综合练习,此次课程设计的题目是自拟的。
在和我的队友反复的讨论下,我们一致同意写以C++和MFC 为主要知识点的MFC人—人对战五子棋。
1.2需求分析(1)设计用户图形界面,用户通过鼠标就可以操作游戏。
(2)以二维数组的形式储存棋盘的下子信息,包括坐标和棋子类型。
(3)设置开始、结束和排行榜用于操作和查看下棋的信息。
(4)游戏有自动保存玩家输赢信息的功能。
(5)为了使算法简单,游戏中的棋盘、棋子等都以位图的形式操作。
二、概要设计2.1游戏流程三、详细设计3.1.1游戏界面的制作利用MFC AppWinzard生成五子棋游戏应用程序框架具体步骤如下:(1)执行VC程序,选择File|New命令,弹出New对话框.单击Projects标签,转到Projects选项卡,选择MFC AppWizard(exe)选项,然后在Project name文本框中输入Fivechess_44 。
Lacation文本框是指项目的本地路径。
(2)单击按钮,弹出MFC AppWinzard_Step1对话框。
Python五子棋游戏代码
Python五子棋游戏代码五子棋游戏涉及到的内容较多,这里给出一个简化版的五子棋游戏实现。
首先需要安装pygame库,可以使用以下命令安装:bashpip install pygame接下来是五子棋游戏的代码:import pygameimport sys# 初始化pygamepygame.init()# 设置屏幕大小screen_size = (600, 600)screen = pygame.display.set_mode(screen_size)# 设置颜色white = (255, 255, 255)black = (0, 0, 0)# 加载棋盘图片board_image = pygame.image.load("board.png")# 设置棋盘大小board_size = board_image.get_rect().size# 设置棋盘坐标def get_position(x, y):return x * board_size[0], y * board_size[1]# 绘制棋盘def draw_board():for x in range(15):for y in range(15):rect = get_position(x, y)screen.blit(board_image, rect)pygame.draw.line(screen, black, get_position(x, y), get_position((x + 1) % 15, y), 2)pygame.draw.line(screen, black, get_position(x, y), get_position((x - 1) % 15, y), 2)# 主循环player = 1while True:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()elif event.type == pygame.MOUSEBUTTONDOWN:x, y = event.posx, y = x // board_size[0], y // board_size[1]if board_image.get_at((x, y)) == (0, 0, 0):if player == 1:player = 2else:player = 1screen.fill(white)draw_board()pygame.display.flip()注意:这个示例需要你提供一张名为"board.png"的棋盘图片。
五子棋游戏代码—C语言
C语言游戏之五子棋源代码#include<stdio.h>#include<stdlib.h>#include<graphics.h>#include<bios.h>#include<conio.h>#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011b#define SPACE 0x3920#define BILI 20#define JZ 4#define JS 3#define N 19int box[N][N];int step_x,step_y ;int key ;int flag=1 ;void draw_box();void draw_cicle(int x,int y,int color); void change();void judgewho(int x,int y);void judgekey();int judgeresult(int x,int y);void attentoin();void attention(){char ch ;window(1,1,80,25);textbackground(LIGHTBLUE);textcolor(YELLOW);clrscr();gotoxy(15,2);printf("游戏操作规则:");gotoxy(15,4);printf("Play Rules:");gotoxy(15,6);printf("1、按左右上下方向键移动棋子");gotoxy(15,8);printf("1. Press Left,Right,Up,Down Key to move Piece");gotoxy(15,10);printf("2、按空格确定落棋子");gotoxy(15,12);printf("2. Press Space to place the Piece");gotoxy(15,14);printf("3、禁止在棋盘外按空格");gotoxy(15,16);printf("3. DO NOT press Space outside of the chessboard");gotoxy(15,18);printf("你是否接受上述的游戏规则(Y/N)");gotoxy(15,20);printf("Do you accept the above Playing Rules? [Y/N]:");while(1){gotoxy(60,20);ch=getche();if(ch=='Y'||ch=='y')break ;else if(ch=='N'||ch=='n'){window(1,1,80,25);textbackground(BLACK);textcolor(LIGHTGRAY);clrscr();exit(0);}gotoxy(51,12);printf(" ");}}void draw_box(){int x1,x2,y1,y2 ;setbkcolor(LIGHTBLUE);setcolor(YELLOW);gotoxy(7,2);printf("Left, Right, Up, Down KEY to move, Space to put, ESC-quit.");for(x1=1,y1=1,y2=18;x1<=18;x1++) line((x1+JZ)*BILI,(y1+JS)*BILI,(x 1+JZ)*BILI,(y2+JS)*BILI);for(x1=1,y1=1,x2=18;y1<=18;y1++) line((x1+JZ)*BILI,(y1+JS)*BILI,(x 2+JZ)*BILI,(y1+JS)*BILI);for(x1=1;x1<=18;x1++)for(y1=1;y1<=18;y1++)box[x1][y1]=0 ;}void draw_circle(int x,int y,int color) {setcolor(color);setlinestyle(SOLID_LINE,0,1);x=(x+JZ)*BILI ;y=(y+JS)*BILI ;circle(x,y,8);}void judgekey(){int i ;int j ;switch(key){case LEFT :if(step_x-1<0)break ;else{for(i=step_x-1,j=step_y;i>=1;i --)if(box[i][j]==0){draw_circle(step_x,step_y,LIGHTBLU E);break ;}if(i<1)break ;step_x=i ;judgewho(step_x,step_y);break ;}case RIGHT :if(step_x+1>18)break ;else{for(i=step_x+1,j=step_y;i<=18 ;i++)if(box[i][j]==0){draw_circle(step_x,step_y,LIGH TBLUE);break ;}if(i>18)break ;step_x=i ;judgewho(step_x,step_y);break ;}case DOWN :if((step_y+1)>18)break ;else{for(i=step_x,j=step_y+1;j<=18 ;j++)if(box[i][j]==0){draw_circle(step_x,step_y,LIGHTBLU E);break ;}if(j>18)break ;step_y=j ;judgewho(step_x,step_y);break ;}case UP :if((step_y-1)<0)break ;else{for(i=step_x,j=step_y-1;j>=1;j --)if(box[i][j]==0){draw_circle(step_x,step_y,LIGHTBLU E);break ;}if(j<1)break ;step_y=j ;judgewho(step_x,step_y);break ;}case ESC :break ;case SPACE :if(step_x>=1&&step_x<=18&&s tep_y>=1&&step_y<=18){if(box[step_x][step_y]==0){box[step_x][step_y]=flag ; if(judgeresult(step_x,step_y)==1){sound(1000);delay(1000);nosound();gotoxy(30,4);if(flag==1){setbkcolor(BLUE);cleardevice(); setviewport(100,100,540,380,1);/*定义一个图形窗口*/setfillstyle(1,2);/*绿色以实填充*/setcolor(YELLOW);rectangle(0,0,439,279);floodfill(50,50,14);setcolor(12);settextstyle(1,0,5);/*三重笔划字体, 水平放?5倍*/ outtextxy(20,20,"The White Win !");setcolor(15);settextstyle(3,0,5);*无衬笔划字体, 水平放大5倍*/ uttextxy(120,120,"The White Win !");setcolor(14);settextstyle(2,0,8);getch();closegraph();exit(0);}if(flag==2){setbkcolor(BLUE);cleardevice();setviewport(100,100,540,380,1);/*定义一个图形窗口*/setfillstyle(1,2);/*绿色以实填充*/setcolor(YELLOW);rectangle(0,0,439,279);floodfill(50,50,14);setcolor(12);settextstyle(1,0,8);笔划字体, 水平放大8倍*/ outtextxy(20,20,"The Red Win !");setcolor(15);settextstyle(3,0,5);/*无衬笔划字体, 水平放大5倍*/outtextxy(120,120,"The Red Win !");setcolor(14);settextstyle(2,0,8);getch();closegraph();exit(0);}}change();break ;}}elsebreak ;}}void change(){if(flag==1)flag=2 ;elseflag=1 ;}void judgewho(int x,int y){if(flag==1)draw_circle(x,y,15);if(flag==2)draw_circle(x,y,4);}int judgeresult(int x,int y){ int j,k,n1,n2 ;while(1){ n1=0 ;n2=0 ;/*水平向左数*/for(j=x,k=y;j>=1;j--){ if(box[j][k]==flag)n1++;elsebreak ;}/*水平向右数*/for(j=x,k=y;j<=18;j++) {if(box[j][k]==flag)n2++;elsebreak ;}if(n1+n2-1>=5){return(1);break ;}/*垂直向上数*/n1=0 ;n2=0 ;for(j=x,k=y;k>=1;k--) {if(box[j][k]==flag)n1++;elsebreak ;}/*垂直向下数*/for(j=x,k=y;k<=18;k++) {if(box[j][k]==flag)n2++;elsebreak ;}if(n1+n2-1>=5){return(1);break ;}/*向左上方数*/n1=0 ;n2=0 ;for(j=x,k=y;j>=1,k>=1;j--,k--){if(box[j][k]==flag)n1++;elsebreak ;}/*向右下方数*/for(j=x,k=y;j<=18,k<=18;j++,k+ +){if(box[j][k]==flag)n2++;elsebreak ;}if(n1+n2-1>=5){return(1);break ;}/*向右上方数*/n1=0 ;n2=0 ;for(j=x,k=y;j<=18,k>=1;j++,k--){if(box[j][k]==flag)n1++;elsebreak ;}/*向左下方数*/for(j=x,k=y;j>=1,k<=18;j--,k++){if(box[j][k]==flag)n2++;elsebreak ;}if(n1+n2-1>=5){ return(1);break ;}return(0);break ;} }void main(){int gdriver=VGA,gmode=VGAHI;clrscr();attention();initgraph(&gdriver,&gmode,"c:\\tc" );/* setwritemode(XOR_PUT);*/flag=1 ;draw_box();do{step_x=0 ;step_y=0 ;/*draw_circle(step_x,step_y,8); */judgewho(step_x-1,step_y-1);do{while(bioskey(1)==0);key=bioskey(0);judgekey();}while(key!=SPACE&&key!=ESC);}while(key!=ESC);closegraph();}。
五子棋程序设计说明书
}
printf("\n");
}
}
int judge(int x,int y) /*判断各方向五子是否连成一线*/ //x,y分别为横纵坐标//
设计背景及意义
我们的五子棋程序是在Visual C++ 环境下运行的。
Visual C++
Microsoft Visual C++(简称Visual C++、MSVC、VC++或VC)微软公司的C++开发工具,具有集成开发环境,可提供编辑C语言,C++以及C++/CLI等编程语言。VC++整合了便利的除错工具,特别是整合了微软视窗程式设计(Windows API)、三维动画DirectX API,Microsoft .NET框架。目前最新的版本是Microsoft Visual C++ 2010。Visual C++集成了,于1998发行。发行至今一直被广泛地用于大大小小的项目开发。
case 97: *y=*y-1;break; //a键控制棋子左移//
case 115: *x=*x+1;break; //s键控制棋子下移//
case 100: *y=*y+1;break; //d键控制棋子右移//
case 111: flag=0;break; //o键确定落子//
}
if(flag==0) break; //判断某步是否移动完成//
for(i=0;i<2000;i++) //改变玩家//{来自if(flag==1)
flag=0;
else
C语言五子棋源代码_设计报告1
C语言五子棋源代码_设计报告1C语言五子棋源代码_设计报告1设计报告一、概述本项目是一个基于C语言的五子棋游戏,实现了双人对战的功能。
通过控制台界面显示棋盘和棋子,并进行相应的逻辑判断,以确定游戏的胜负。
二、设计思路1.棋盘的显示使用二维数组来表示棋盘,通过循环遍历数组并打印相应的字符来显示棋盘。
2.棋子的放置根据玩家的输入即坐标位置,在对应的数组下标位置放置相应的字符表示棋子。
3.游戏逻辑设计了胜利的条件判断函数,通过检查棋盘中的连续五个相同的字符来判断是否已经获胜。
4.玩家输入的处理使用循环来等待玩家输入,输入合法的坐标后进行相应的处理,包括棋盘上棋子的放置、胜利判断以及游戏结束的处理。
5.游戏结束的判断游戏结束时,根据胜利的条件判断结果进行相应的处理,可以继续游戏或退出游戏。
三、关键函数说明1. void displayBoard(char board[ROW][COL])该函数用于显示棋盘,根据棋盘数组的值打印相应的字符来显示棋盘。
2. int isWin(char board[ROW][COL], int x, int y)该函数用于判断当前位置的棋子是否连成五子线,如果是胜利则返回1,否则返回0。
3. void playerMove(char board[ROW][COL], int player)该函数用于玩家输入坐标,并将相应的棋子放置在棋盘上,同时进行胜利判断。
4. void playGame该函数用于游戏的整体流程,循环进行玩家的输入和处理,直到出现胜利或平局。
四、总结通过本项目的设计和实现,我进一步熟悉了C语言的编程技巧和逻辑思维,学会了如何通过编写函数来组织代码和实现功能。
同时,我也了解了五子棋游戏的规则和胜利判断的逻辑。
通过不断调试和优化代码,我成功地实现了一个简单但完整的五子棋游戏,提升了自己的编程能力和解决问题的能力。
这个项目的完成使我对C语言的应用有了更加深入的理解,也锻炼了我的团队合作和解决问题的能力。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
II
兰州理工大学软件学院
C 语言课程设计
1、需求分析
1.1 总体分析
软件需求分析是软件开发周期的第一个阶段,也是关系到软件开发的关键一步。 对于任何一个软件而言,需求分析工作都是至关重要的一步。只有通过软件需求分析, 才能把软件的功能和性能由总体的概念性描述转化为具体的规格说明,进而建立软件 开发的基础。实践表明,需求分析工作进行得好坏,在很大程度上决定了软件开发的 成败。
1.1 总体分析...............................................................................................................................................1 1.2 初始化................................................................................................................................................... 1 1.3 主循环控制模块...................................................................................................................................1 1.4 玩家下子...............................................................................................................................................1 1.5 盘面分析填写棋型表........................................................................................................................... 2 1.6 对方下子...............................................................................................................................................2 1.7 胜负判断...............................................................................................................................................2
i
兰州理工大学软件学院
C 语言课程设计
摘要
游戏设计已经成为现在社会的一种热门行业。五子棋是一种受大众广泛喜爱的游 戏,其规则简单,变化多端,只需两人即可进行,非常富有趣味性和消遣性。这里设 计和实现了一个双人对下的黑白五子棋单机游戏。主要应用了 Visual C++编程来完成 这个游戏的设计的。本文主要介绍了本游戏开发环境 Microsoft Visual C++ 6.0,使 用当前优秀的开发工具 VC++编程。包含了五子棋程序的棋盘初始化、游戏规则、胜负 判断方法,及帮助等。
4、运行调试与分析讨论........................................................................................................7 4、运行调试与分析讨论........................................................................................................8
*******************
实践教学
*******************
软件学院
2012 年秋季学期
C名: 学 号: 指导教师: 成 绩:
五子棋游戏的设计
兰州理工大学软件学院
目录
C 语言课程设计
目录.......................................................................................................................................... I 摘要.......................................................................................................................................... I 序言.........................................................................................................................................II 1、需求分析............................................................................................................................1
2、设计思路............................................................................................................................3
2.1 五子棋的起源与发展........................................................................................................................... 3 2.2 五子棋的基本术语及规则...................................................................................................................3 2.2.1 五子棋的基本术语:........................................................................................................................3 2.2.2 五子棋的规则...................................................................................................................................4 2.3 功能描述...............................................................................................................................................5
4.1 运行结果...............................................................................................................................................8 4.2 分析讨论.............................................................................................................................................12
软件需求分析的任务是:让客户和开发者共同明确将要开发的是怎样一个软件。 具体而言,就是通过对问题和环境的理解、分析和综合,建立逻辑模型,完成新软件 的逻辑方案设计。
基于本游戏,首先得为整个棋盘建立一张表格用以记录棋子信息,我们使用一个 15*15 的二维数组 table[15][15](15*15 是五子棋棋盘的大小),数组的每一个元素 对应棋盘上的一个交叉点,用‘0’表示空位、‘1’表示自己的子,‘2’表示对方的子; 这张表也是今后分析的基础。在此之后还要为两个玩家双方各建立一张棋型表 Computer[15][15][4]和 Player[15][15][4],用来存放棋型数据。
3、详细设计............................................................................................................................6
3.1 流程图................................................................................................................................................... 6
5、设计体会与小结..............................................................................................................13