C语言课程设计 黑白棋游戏

合集下载

第22章C语言程序课程设计游戏

第22章C语言程序课程设计游戏

22.1.7 交替绘制黑白棋
• 当黑棋在棋盘中确定落子以后,那么在棋子出现 的初始位置应该马上显示白子;同理,当白棋在 棋盘中确定落子以后,在棋子出现的初始位置应 该马上出现黑子。程序中,棋子出现的初始位置 的坐标设为(-1,0)。此时需要注意,棋子在初 始位置时,只能往右移动,其他方向都不可移动。 显示初始位置棋子和其颜色的函数为 show_init(int pat);以下是可以移动的棋子出 现在初始位置,交替出现黑白子的功能函数的具 体实现代码。参数pat表明了棋子显示的颜色,当 pat为0时,棋子为黑色;当pat为1时,棋子为白 色。
• 1.挖雷处理模块 • 2.状态处理模块 • 3.程序判定模块
22.3.8 小结
• 通过上面的程序实现了TC下的扫雷游戏,可以采 用键盘进行操作,达到了程序的功能要求。但是 也可以看出,程序的界面比较粗糙,而且采用键 盘操作非常的不放便,并且目前的程序只实现了 10×10的游戏,还不够完善。借助之前学习到的 知识,可以进行不断的完善。首先是界面的改良, 其次是鼠标操作的加入。相信有兴趣的同学,一 定能够实现拥有自己独特风格的扫雷游戏。
22.2 五子棋
• 五子棋是很多 上都带的游戏,是很多人休闲解 压的一种方式,本节除介绍五子棋的玩法外,还 详细介绍了其开发过程。
22.2.1 程序功能要求
• 程序说明:五子棋是一款经典的益智类游戏,通 常是黑棋先行;五子棋专用盘为15×15方格 ,五 个子的连接方向为横、竖、斜,当任一方的五个 子在各个方向上连成一线,则该方获胜。
• 扫雷游戏最早出现在Window操作系统上,随着 Windows的流行,这个小游戏也越来越受全球人民 的欢迎,也有很多不同语言的游戏开发版本,本 节介绍如何用C开发扫雷游戏。

基于C语言的黑白棋游戏设计

基于C语言的黑白棋游戏设计

基于C语言的黑白棋游戏设计黑白棋,也被称为翻转棋,在全球范围内广受欢迎。

它的玩法简单而富有挑战性,因此在计算机科学领域中,基于C语言的黑白棋游戏设计成为了一个常见的项目。

本文将详细介绍如何使用C语言设计一个功能完善的黑白棋游戏。

一、游戏规则黑白棋的规则很简单,游戏双方通过轮流下棋,在棋盘上放置自己颜色的棋子。

当一个棋子被夹在两个对方的棋子之间时,这个棋子就会被翻转成对方的颜色。

游戏继续进行,直到棋盘被填满或者双方都无法再下棋为止。

最后,棋盘上棋子数量较多的一方获胜。

二、程序设计1. 游戏界面设计在设计游戏界面时,我们可以使用C语言提供的字符画功能。

通过绘制合适大小的方格和棋子标识符,可以在控制台上模拟出一个棋盘。

同时,使用特殊字符来绘制提示信息和菜单栏,可以增强游戏的可玩性和视觉效果。

2. 数据结构设计为了表示棋盘和棋子的状态,我们需要设计相应的数据结构。

一个简单而有效的方法是使用二维数组来表示棋盘。

每个数组元素的值可以用来表示该位置的状态,比如1表示黑棋、2表示白棋、0表示空位。

这样,可以通过对数组的操作来实现棋子的落子和翻转。

3. 游戏逻辑设计黑白棋的游戏逻辑涉及到棋子落子、翻转以及胜负的判断。

在程序设计中,我们需要编写相应的函数来处理这些逻辑。

比如,可以编写一个函数来检查某一位置是否可以落子,以及另一个函数来实现棋子翻转的操作。

4. 用户交互设计为了使游戏更加友好和可操作性强,我们可以设计一些用户交互功能。

比如,在每次轮到玩家下棋时,程序可以提示玩家输入坐标来落子。

同时,我们可以设计一些额外的功能,比如悔棋、重新开始等,以提升游戏的易用性。

三、程序实现下面是一个简单的基于C语言的黑白棋游戏设计的示例代码:```c#include<stdio.h>#define SIZE 8void initializeBoard(int board[SIZE][SIZE]) {// 初始化棋盘}void printBoard(int board[SIZE][SIZE]) {// 绘制棋盘}int isLegalMove(int board[SIZE][SIZE], int row, int col) {// 检查是否可以落子}void makeMove(int board[SIZE][SIZE], int row, int col, int player) { // 落子}void flipPieces(int board[SIZE][SIZE], int row, int col, int player) { // 翻转棋子}int hasValidMove(int board[SIZE][SIZE], int player) {// 检查是否有可行的落子点}int countPieces(int board[SIZE][SIZE], int player) {// 统计棋盘上的棋子数量}int main() {int board[SIZE][SIZE];int currentPlayer = 1; // 1代表黑子,2代表白子initializeBoard(board);while (hasValidMove(board, currentPlayer)) {printBoard(board);int row, col;printf("Player %d's turn, please enter row and column: ", currentPlayer);scanf("%d %d", &row, &col);if (isLegalMove(board, row, col)) {makeMove(board, row, col, currentPlayer);flipPieces(board, row, col, currentPlayer);currentPlayer = (currentPlayer == 1) ? 2 : 1;} else {printf("Invalid move!\n");}}int blackCount = countPieces(board, 1);int whiteCount = countPieces(board, 2);printf("Game over! ");if (blackCount > whiteCount) {printf("Player 1 wins!\n");} else if (blackCount < whiteCount) {printf("Player 2 wins!\n");} else {printf("It's a draw!\n");}return 0;}```四、总结通过使用C语言,我们可以轻松地设计和实现一个黑白棋游戏程序。

c课程设计黑白棋摘要

c课程设计黑白棋摘要

c 课程设计黑白棋摘要一、教学目标本节课的教学目标是让学生掌握黑白棋的基本规则和技巧,能够进行简单的对战游戏。

知识目标包括了解黑白棋的历史背景、规则和策略,技能目标包括能够熟练操作棋子进行游戏,情感态度价值观目标包括培养学生的团队合作意识、耐心和思考能力。

二、教学内容本节课的教学内容主要包括黑白棋的基本规则、棋子的操作方法和游戏策略。

教学大纲如下:1.黑白棋的历史背景和规则介绍2.棋子的操作方法:如何走棋、吃子、保护棋子等3.游戏策略:如何布局、进攻、防守等三、教学方法为了激发学生的学习兴趣和主动性,本节课将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。

1.讲授法:教师通过讲解黑白棋的基本规则和策略,让学生了解游戏的基本知识。

2.讨论法:学生分组讨论棋子的操作方法和游戏策略,促进学生之间的交流和合作。

3.案例分析法:教师展示一些经典的黑白棋对战案例,让学生分析双方的策略和胜负原因。

4.实验法:学生进行实际的棋局对战,通过实践提高自己的游戏技巧。

四、教学资源为了支持教学内容和教学方法的实施,本节课将准备以下教学资源:1.教材:提供黑白棋的规则和策略介绍,供学生参考。

2.参考书:提供一些关于黑白棋的进阶知识,供学生拓展学习。

3.多媒体资料:通过视频或图片展示黑白棋的历史背景和经典对战案例。

4.实验设备:提供足够的棋子和棋盘,让学生进行实际的棋局对战。

五、教学评估本节课的教学评估将采用多种方式,以全面、客观、公正地评价学生的学习成果。

评估方式包括平时表现、作业和考试等。

1.平时表现:通过观察学生在课堂上的参与度、提问回答和小组讨论的表现来评估学生的学习态度和理解程度。

2.作业:布置相关的黑白棋练习题,要求学生在课后完成,通过作业的完成质量来评估学生的掌握程度。

3.考试:安排一次黑白棋的对战考试,通过学生的游戏表现和策略运用来评估其综合运用能力。

六、教学安排本节课的教学安排将根据学生的实际情况和教学任务进行合理规划。

C语言 黑白棋课程设计

C语言 黑白棋课程设计

青岛理工大学《C语言程序设计》题目指导教师:姓名:学号:班级:专业:计算机科学与技术地点:学校机房时间:2012/6/25至2012/6/27在开始之前先下载C语言另加程序下面是下载地址:完整的源代码在文档最后/file/0cb739cbc2e59f0e7a9f11ddb5531bb8?xcode=6fc925477da8788a55 89ab5cf3551107&fid=706832624-250528-3524259283&time=1372324156&sign=FDTAXER-D Cb740ccc5511e5e8fedcff06b081203-x%2BLowAWkVifyCdSpCEA Vjd1U450%3D&to=wb&fm= Q,B,M&expires=8h&rt=pr&r=178293519&logid=3072430087一、内容黑白棋游戏设计本系统主要是在8*8规格的棋盘上实现两人黑白棋对战,功能包括:统计对弈双方各自棋子个数,当一方所下子位置不满足“自己的棋子在上下左右及斜线方向上中间包夹对方至少一个或多个棋子”条件时不能下子,满足要求的地方下子。

(2)当一方棋子棋子为0或下满棋格时结束,系统自动统计双方棋子数子多着胜。

并在游戏结束时出现提示框,显示队以结果,胜负情况,,两个按钮,“是”重新开始游戏,“否”结束游戏。

(3)游戏是用鼠标控制下棋,在下子位置点击鼠标左键安放旗子二、上机环境操作系统:WindowsXp开发工具:Microsoft visual c++6.0三、函数调用关系图wui四、各函数功能说明1.main() 主函数2.void load(void) 加载图片3.void play(void) 游戏过程控制,调用其他子函数4.void print(void) 画棋盘,以及后来画安放的棋子5.void jianjie() 在棋盘右侧显示一些游戏。

黑白棋c课程设计

黑白棋c课程设计

黑白棋c 课程设计一、教学目标本课程旨在通过黑白棋(C)的教学,让学生掌握黑白棋的基本规则和策略,提高学生的逻辑思维能力和决策能力。

具体的教学目标如下:知识目标:学生能够理解黑白棋的起源、基本规则和常用策略。

技能目标:学生能够独立完成黑白棋的设置和游戏,掌握基本的对弈技巧和策略。

情感态度价值观目标:学生能够培养团队合作精神,学会尊重对手,增强自信心和抗挫能力。

二、教学内容本课程的教学内容主要包括黑白棋的基本规则、棋子的走法、游戏的设置和策略等。

具体的教学内容如下:1.黑白棋的起源和发展:介绍黑白棋的历史背景和发展过程。

2.黑白棋的基本规则:讲解棋盘的布局、棋子的颜色和初始位置,以及如何进行合法的走法。

3.棋子的走法:教授不同棋子的走法,包括王、后、象、马、车等。

4.游戏的设置:讲解如何设置棋盘和初始布局,以及如何进行合法的走法。

5.常用策略:介绍基本的黑白棋策略,如包围、阻断、防守等。

三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。

1.讲授法:通过讲解黑白棋的基本规则、棋子的走法和常用策略,使学生掌握相关知识。

2.讨论法:学生进行小组讨论,分享彼此的黑白棋经验和策略,提高学生的思考和沟通能力。

3.案例分析法:分析经典的黑白棋对局,让学生学会分析局势和制定策略。

4.实验法:让学生亲自动手进行黑白棋游戏,培养学生的实际操作能力和决策能力。

四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将选择和准备以下教学资源:1.教材:选用权威、实用的黑白棋教材,为学生提供系统的学习材料。

2.参考书:提供相关的黑白棋参考书籍,供学生课后拓展阅读。

3.多媒体资料:制作精美的PPT和教学视频,帮助学生更好地理解和掌握黑白棋知识。

4.实验设备:提供足够的黑白棋棋盘和棋子,让学生进行实际操作和练习。

五、教学评估本课程的评估方式将包括平时表现、作业和考试等,以全面、客观地评价学生的学习成果。

C程序 黑白棋

C程序 黑白棋

计算机技术基础课程设计C语言设计报告题目:黑白棋学院:化学工程学院专业:制药工程班级:050607姓名:裴敦锐指导教师:顾煜新设计日期:2007 年1月10日题目:黑白棋一、选题背景:我们日常生活中的小游戏机、手机上,经常会有黑白棋、拼图游戏、俄罗斯方块、推箱子、乒乓弹球等小游戏,这些小游戏可以让我们在日常紧张繁忙的生活中调节情绪,以达到放松身心的作用。

因此,我做了一个黑白棋的小游戏,希望在学习的空闲时间能够过得开心快乐!二、设计思想:该游戏是一款轻巧易玩的游戏。

利用C语言提供的丰富的图形函数构筑友好的图形界面。

利用了FOR,WHILE循环以及if判断实现游戏的各种分支顺利进行。

游戏初始在棋盘中央每方有二子,双方交替下子。

后下一方的两个棋子夹着的对方棋子变为己方棋子。

如无处可下子则继续由另一方下子。

棋盘为8×8的格。

未下满时一方无子则自动判负。

当棋盘下满后棋子多的一方为胜。

当双方子数量相同时判为和棋。

三、程序流程图四、程序清单#include "graphics.h" /*图形系统头文件*/#define LEFT 0x4b00 /*光标左键值*/#define RIGHT 0x4d00 /*光标右键值*/#define DOWN 0x5000 /*光标下键值*/#define UP 0x4800 /*光标上键值*/#define ESC 0x011b /* ESC键值*/#define ENTER 0x1c0d /* 回车键值*/int a[8][8]={0},key,score1,score2;/*分数以及按键与存放棋子的变量*/ char playone[3],playtwo[3];/*两个人的得分转换成字符串输出*/void playtoplay(void);/*人人对战函数*/void DrawQp(void);/*画棋盘函数*/void SetPlayColor(int x);/*设置棋子第一次的颜色*/void MoveColor(int x,int y);/*恢复原来棋盘状态*/int QpChange(int x,int y,int z);/*判断棋盘的变化*/void DoScore(void);/*处理分数*/void PrintScore(int n);/*输出成绩*/void playWin(void);/*输出胜利者信息*/void main(void){int gd=DETECT,gr;initgraph(&gd,&gr,"c:\\tc"); /*初始化图形系统*/DrawQp();/*画棋盘*/playtoplay();/*人人对战*/getch();closegraph();/*关闭图形系统*/}void DrawQp()/*画棋盘*/{int i,j;score1=score2=0;/*棋手一开始得分都为0*/setbkcolor(GREEN);/*设置背景颜色*/for(i=100;i<=420;i+=40){line(100,i,420,i);/*画水平线*/line(i,100,i,420); /*画垂直线*/}setcolor(0);/*取消圆周围的一圈东西*/setfillstyle(SOLID_FILL,15);/*白色实体填充模式*/fillellipse(500,200,15,15); /*在显示得分的位置画棋*/setfillstyle(SOLID_FILL,8); /*黑色实体填充模式*/fillellipse(500,300,15,15);a[3][3]=a[4][4]=1;/*初始两个黑棋*/a[3][4]=a[4][3]=2;/*初始两个白棋*/setfillstyle(SOLID_FILL,WHITE);fillellipse(120+3*40,120+3*40,15,15);fillellipse(120+4*40,120+4*40,15,15);setfillstyle(SOLID_FILL,8);fillellipse(120+3*40,120+4*40,15,15);fillellipse(120+4*40,120+3*40,15,15);score1=score2=2; /*有棋后改变分数*/DoScore();/*输出开始分数*/}void playtoplay()/*人人对战*/{int x,y,t=1,i,j,cc=0;while(1)/*换棋手走棋*/{x=120,y=80;/*每次棋子一开始出来的坐标,x为行坐标,y为列坐标*/ while(1) /*具体一个棋手走棋的过程*/{PrintScore(1);/*输出棋手1的成绩*/PrintScore(2);/*输出棋手2的成绩*/SetPlayColor(t);/*t变量是用来判断棋手所执棋子的颜色*/fillellipse(x,y,15,15);key=bioskey(0);/*接收按键*/if(key==ESC)/*跳出游戏*/break;elseif(key==ENTER)/*如果按键确定就可以跳出循环*/{if(y!=80&&a[(x-120)/40][(y-120)/40]!=1&&a[(x-120)/40][(y-120)/40]!=2)/*如果落子位置没有棋子*/ {if(t%2==1)/*如果是棋手1移动*/a[(x-120)/40][(y-120)/40]=1;else/*否则棋手2移动*/a[(x-120)/40][(y-120)/40]=2;if(!QpChange(x,y,t))/*落子后判断棋盘的变化*/{a[(x-120)/40][(y-120)/40]=0;/*恢复空格状态*/cc++;/*开始统计尝试次数*/if(cc>=64-score1-score2) /*如果尝试超过空格数则停步*/ {MoveColor(x,y);fillellipse(x,y,15,15);break;}elsecontinue;/*如果按键无效*/}DoScore();/*分数的改变*/break;/*棋盘变化了,则轮对方走棋*/}else/*已经有棋子就继续按键*/continue;}else /*四个方向按键的判断*/if(key==LEFT&&x>120)/*左方向键*/{MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);x-=40;fillellipse(x,y,15,15);}elseif(key==RIGHT&&x<400&&y>80)/*右方向键*/{MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);x+=40;fillellipse(x,y,15,15);}elseif(key==UP&&y>120)/*上方向键*/{MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);y-=40;fillellipse(x,y,15,15);}elseif(key==DOWN&&y<400)/*下方向键*/{MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);y+=40;fillellipse(x,y,15,15);}}if(key==ESC)/*结束游戏*/break;if((score1+score2)==64||score1==0||score2==0)/*格子已经占满或一方棋子为0判断胜负*/{playWin();/*输出最后结果*/break;}t=t%2+1; /*一方走后,改变棋子颜色即轮对方走*/cc=0; /*计数值恢复为0*/} /*endwhile*/}void SetPlayColor(int t)/*设置棋子颜色*/{if(t%2==1)setfillstyle(SOLID_FILL,15);/*白色*/elsesetfillstyle(SOLID_FILL,8);/*灰色*/}void MoveColor(int x,int y)/*走了一步后恢复原来格子的状态*/{if(y<100)/*如果是从起点出发就恢复绿色*/setfillstyle(SOLID_FILL,GREEN);else/*其他情况,1就恢复白色棋子,2恢复黑色棋子,或恢复绿色棋盘*/ switch(a[(x-120)/40][(y-120)/40]){case 1:setfillstyle(SOLID_FILL,15);break; /*白色*/case 2:setfillstyle(SOLID_FILL,8);break; /*黑色*/default:setfillstyle(SOLID_FILL,GREEN); /*绿色*/}}int QpChange(int x,int y,int t)/*判断棋盘的变化*/{int i,j,k,kk,ii,jj,yes;yes=0;i=(x-120)/40; /*计算数组元素的行下标*/j=(y-120)/40; /*计算数组元素的列下标*/SetPlayColor(t);/*设置棋子变化的颜色*//*开始往8个方向判断变化*/if(j<6)/*往右边*/{for(k=j+1;k<8;k++)if(a[i][k]==a[i][j]||a[i][k]==0)/*遇到自己的棋子或空格结束*/ break;if(a[i][k]!=0&&k<8){for(kk=j+1;kk<k&&k<8;kk++)/*判断右边*/{a[i][kk]=a[i][j]; /*改变棋子颜色*/fillellipse(120+i*40,120+kk*40,15,15);}if(kk!=j+1) /*条件成立则有棋子改变过颜色*/yes=1;}}if(j>1)/*判断左边*/{for(k=j-1;k>=0;k--)if(a[i][k]==a[i][j]||!a[i][k])break;if(a[i][k]!=0&&k>=0){for(kk=j-1;kk>k&&k>=0;kk--){a[i][kk]=a[i][j];fillellipse(120+i*40,120+kk*40,15,15);}if(kk!=j-1)yes=1;}}if(i<6)/*判断下边*/{for(k=i+1;k<8;k++)if(a[k][j]==a[i][j]||!a[k][j])break;if(a[k][j]!=0&&k<8){for(kk=i+1;kk<k&&k<8;kk++){a[kk][j]=a[i][j];fillellipse(120+kk*40,120+j*40,15,15);}if(kk!=i+1)yes=1;}}if(i>1)/*判断上边*/{for(k=i-1;k>=0;k--)if(a[k][j]==a[i][j]||!a[k][j])break;if(a[k][j]!=0&&k>=0){for(kk=i-1;kk>k&&k>=0;kk--){a[kk][j]=a[i][j];fillellipse(120+kk*40,120+j*40,15,15);}if(kk!=i-1)yes=1;}}if(i>1&&j<6)/*右上*/{for(k=i-1,kk=j+1;k>=0&&kk<8;k--,kk++) if(a[k][kk]==a[i][j]||!a[k][kk])break;if(a[k][kk]&&k>=0&&kk<8){for(ii=i-1,jj=j+1;ii>k&&k>=0;ii--,jj++){a[ii][jj]=a[i][j];fillellipse(120+ii*40,120+jj*40,15,15);}if(ii!=i-1)yes=1;}}if(i<6&&j>1)/*左下*/{for(k=i+1,kk=j-1;k<8&&kk>=0;k++,kk--) if(a[k][kk]==a[i][j]||!a[k][kk])break;if(a[k][kk]!=0&&k<8&&kk>=0){for(ii=i+1,jj=j-1;ii<k&&k<8;ii++,jj--){a[ii][jj]=a[i][j];fillellipse(120+ii*40,120+jj*40,15,15);}if(ii!=i+1)yes=1;}}if(i>1&&j>1)/*左上*/{for(k=i-1,kk=j-1;k>=0&&kk>=0;k--,kk--) if(a[k][kk]==a[i][j]||!a[k][kk])break;if(a[k][kk]!=0&&k>=0&&kk>=0){for(ii=i-1,jj=j-1;ii>k&&k>=0;ii--,jj--){a[ii][jj]=a[i][j];fillellipse(120+ii*40,120+jj*40,15,15);}if(ii!=i-1)yes=1;}}if(i<6&&j<6)/* 右下*/{for(k=i+1,kk=j+1;kk<8&&kk<8;k++,kk++)if(a[k][kk]==a[i][j]||!a[k][kk])break;if(a[k][kk]!=0&&kk<8&&k<8){for(ii=i+1,jj=j+1;ii<k&&k<8;ii++,jj++){a[ii][jj]=a[i][j];fillellipse(120+ii*40,120+jj*40,15,15);}if(ii!=i+1)yes=1;}}return yes;/*返回是否改变过棋子颜色的标记*/}void DoScore()/*处理分数*/{int i,j;score1=score2=0;/*重新开始计分数*/for(i=0;i<8;i++)for(j=0;j<8;j++)if(a[i][j]==1)/*分别统计两个人的分数*/score1++;elseif(a[i][j]==2)score2++;}void PrintScore(int playnum)/*输出成绩*/{if(playnum==1)/*清除以前的成绩*/{setfillstyle(SOLID_FILL,GREEN);/*设置分数区颜色*/ bar(550,100,640,400);}setcolor(YELLOW);/*设置分数颜色*/settextstyle(0,0,4);/*设置文本输出样式*/if(playnum==1)/*判断输出哪个棋手的分,在不同的位置输出*/{sprintf(playone,"%d",score1);outtextxy(550,200,playone);}else{sprintf(playtwo,"%d",score2);outtextxy(550,300,playtwo);}setcolor(0);}void playWin()/*输出最后的胜利者结果*/{settextstyle(0,0,4);setcolor(12);if(score2>score1)/*开始判断最后的结果*/outtextxy(100,50,"black win! (^o^)");elseif(score2<score1)outtextxy(100,50,"white win! (^o^)");elseouttextxy(60,50,"you all win!");}五、主要解决问题的方法及技术关键1,调用了graphics.h函数,使界面更生动。

c语言课程设计黑白棋

c语言课程设计黑白棋

c语言课程设计黑白棋一、教学目标本课程的目标是让学生掌握C语言编程的基本技能,通过实现一个黑白棋游戏项目,培养学生的编程思维和实际操作能力。

具体目标如下:1.知识目标:学生能熟练使用C语言进行编程,理解基本的编程概念,如变量、数据类型、运算符、控制结构等。

2.技能目标:学生能运用C语言实现简单的逻辑控制和函数调用,具备一定的算法分析能力,能独立完成黑白棋游戏的设计与实现。

3.情感态度价值观目标:培养学生对编程的兴趣和热情,提高学生的问题解决能力,培养学生的团队合作意识和创新精神。

二、教学内容教学内容以C语言的基本概念和编程技巧为主线,结合黑白棋游戏的设计与实现,具体安排如下:1.C语言基本概念:介绍C语言的语法规则、数据类型、运算符、控制结构等基本知识。

2.函数和数组:讲解函数的定义和调用、数组的使用和操作,以及函数指针的概念。

3.黑白棋游戏设计:引导学生分析游戏需求,设计游戏界面和逻辑,实现游戏的基本功能。

4.算法分析和优化:引导学生运用算法分析游戏中的问题,如棋子的移动规则、胜负判断等,并进行优化。

5.团队合作与创新:培养学生进行团队合作,共同完成游戏项目,鼓励学生发挥创新精神,为游戏添加更多功能和玩法。

三、教学方法本课程采用讲授法、讨论法、案例分析法和实验法等多种教学方法,具体安排如下:1.讲授法:讲解C语言的基本概念和编程技巧,为学生提供系统的知识体系。

2.讨论法:学生进行团队讨论,分析游戏需求,设计游戏方案,培养学生的团队合作能力。

3.案例分析法:通过分析典型的黑白棋游戏案例,引导学生掌握游戏设计的要点和技巧。

4.实验法:学生动手编写代码,实现游戏功能,培养学生的实际操作能力和编程思维。

四、教学资源教学资源包括教材、参考书、多媒体资料和实验设备等,具体安排如下:1.教材:选用《C程序设计原理与应用》作为主讲教材,为学生提供系统的知识学习。

2.参考书:推荐《C语言程序设计》等辅助教材,供学生拓展阅读和自学。

黑白棋游戏课程设计

黑白棋游戏课程设计

目录一、设计目的 (2)二、设计要求 (2)三、所需仪器设备 (2)四、课题分析 (2)五、具体设计过程 (3)5.1、设计思路 (3)5.2、程序设计流程图 (3)5.3、函数实现说明 (6)5.4、图形库函数介绍 (7)5.5、程序源代码及注释 (9)5.6、调试结果 (19)六、设计心得体会 (20)七、参考文献 (21)《黑白棋游戏》C语言课程设计一、设计目的本课程设计是计算机软件技术基础重要的实践性环节之一,是在学生学习完《程序设计语言(C)》课程后进行的一次全面的综合练习。

本课程设计的目的和任务:(1)巩固和加深学生对C语言课程的基本知识的理解和掌握;(2)掌握C语言编程和程序调试的基本技能;(3)利用C语言进行基本的软件设计,掌握软件设计一般方法,了解软件设计的思路;(4)掌握书写程序设计报告的能力;(5)提高运用C语言解决实际问题的能力;这个程序也是对编程基本功的一个训练,对于初学C语言的人,讲分支、循环、数组函数综合应用,而不仅限于编制独立的小程序,能够大大提高变成水平。

二、设计要求(1)收集资料,全面分析课题,分解问题,形成中体编程思路;(2)深入分析各个小问题,编写个部分程序模块;(3)对于设计中用到的关键函数,要联系实际问题进行具体介绍;(4)上机调试,确保程序能正确运行;(5)设计完成后提交课程设计报告;三、所需仪器设备(1)硬件要求能运行Windows 2000/XP操作系统的微机系统。

(2)C语言程序设计及相应的开发环境。

(本设计用的是Turbo C for Windows 集成实验与学习环境 V6.0)四、课题分析编写一个《黑白棋游戏》的C程序,包括以下功能:初始状态:在一个8*8的棋盘中央交叉排放黑白棋子各两枚,白棋先走。

(1)每个棋手下棋时,摆子的位置必须是以自己的棋子能包围住对方一个或多个棋子,被包围住的对方棋子将成为自己的棋子。

包围的方向可以是上下左右以及斜线8个方向,只要能连成一线即可。

C语言课程设计黑白棋课程设计

C语言课程设计黑白棋课程设计
问题:程序界面不友好,用户体验差 解决方案:优化界面 设计,提高用户交互体验 解决方案:优化界面设计,提高用户交互体验
问题:程序兼容性差,无法在不同平台上运行 解决方案: 优化代码,提高程序兼容性,确保在不同平台上正常运行 解决方案:优化代码,提高程序兼容性,确保在不同平台上正常运 行
课程设计总结与展望
课程设计收获与体会
学习了C语言的基本语法 和编程技巧
掌握了黑白棋游戏的基本 规则和算法
提高了解决问题的能力和 逻辑思维能力
增强了团队协作和沟通能 力
对未来课程设计有了更深 入的理解和认识
C语言在实际项目中的应用
操作系统:C语言 是许多操作系统的 核心语言,如 Linux、Unix等
嵌入式系统:C语 言在嵌入式系统中 广泛应用,如智能 家电、汽车电子等
常见问题与解决方案
问题:算法效率低下,运行速度慢 解决方案:优化算法, 减少循环次数,提高代码执行效率 解决方案:优化算法,减少循环次数,提高代码执行效率
问题:内存占用过大,导致程序崩溃 解决方案:优化数据 结构,减少内存占用,提高程序稳定性 解决方案:优化数据结构,减少内存占用,提高程序稳定性
游戏规则介绍
黑白棋棋盘为 8*8的方格,双
方轮流落子
落子规则:棋 子落在棋盘的 空格上,不能 落在已有棋子
的格子上
吃子规则:当 一方棋子被另 一方棋子包围 时,被包围的 棋子将被吃掉
胜利条件:当 一方棋子被全 部吃掉或无路 可走时,另一
方获胜
游戏结束:当 双方都无法再 落子或吃掉对 方棋子时,游
学习其他编程语言, 拓宽自己的知识面 和就业选择
感谢您的耐心观看
汇报人:
棋子移动:棋子只能移动到相邻的空格,不 能越过其他棋子

黑白棋程序设计实验报告C 版

黑白棋程序设计实验报告C  版
2
4
二、程序设计思路及游戏实现界面
1、设计初始化棋盘函数 2、复制棋盘函数 3、显示棋盘函数 4、选择下棋类型 4、计算可落子的位置个数,及该位置落子后翻过的棋子的个数 5、设置棋子的稳定性(计算得分的依据),空白处除外 6、评价棋手得分
游戏开始选择类型和棋子:
5
打印棋盘棋手开始下棋输入下棋的位置:
14
else { int i2,j2,flag=2; for(i2=i+x,j2=j+y;i2>=0 j2<=7;i2+=x,j2+=y) { if(board->cell[i2][j2].color!=board->cell[i][j].color) { flag--; break; } } for(i2=i-x,j2=j-y;i2>=0 j2<=7;i2-=x,j2-=y) { if(board->cell[i2][j2].color!=board->cell[i][j].color) { flag--; break; } } if(flag) /* 在某一条线上稳定 */ { board->cell[i][j].stable++; } } } } } } } } /* * 评价棋手得分. */ int Chessboard::evaluate(Chessboard *board,enum Color player) { int value=0; int i,j; setStable(board); for(i=0;i<8;i++)
10
{ cout<<"---"<<i+1; } cout<<"\n ────────────────\n"; for(i=0;i<8;i++) { cout<<i+1<<"--│"; for(j=0;j<8;j++) { switch(board->cell[i][j].color) { case BLACK: cout<<"○│"; break; case WHITE: cout<<"●│"; break; case BLANK: if(board->cell[i][j].stable) { cout<<" +│"; } else { cout<<" } break; default: /* 棋子颜色错误 */ cout<<"* │"; } } cout<<"\n } cout<<"白棋(●)个数为:"<<board->whiteNum<<" "; cout<<"黑棋(○)个数为:"<<board->blackNum<<endl<<endl<<endl; } ────────────────\n"; │";

c语言 黑白棋程序设计文档

c语言 黑白棋程序设计文档

c语言黑白棋程序设计文档本文将为您介绍一份经过精心设计的基于C语言的黑白棋程序设计文档。

这个文档旨在为开发者提供一个清晰易懂、易于扩展的代码框架,以便更好地完成黑白棋游戏。

以下是本文档的结构和内容:一、简介黑白棋是一款二人对弈的棋类游戏,在8x8的方格棋盘上进行。

本程序的目标是实现一个基本的黑白棋人机对战游戏。

玩家可以使用键盘来操作棋子落下的位置,程序会根据规则自动判断是否可以落子,并自动翻转另一方的棋子。

程序还可以提供简单的AI进行游戏,让玩家可以对战电脑。

本程序使用了C语言进行编写,并且采用简单易懂的函数式编程方法,使得程序更加易于维护和扩展。

二、程序设计在程序设计中,我们遵循了模块化、封装和数据隐藏的原则,使得代码结构更加清晰明了,易于理解和维护。

主要分为5个模块:负责程序的初始化工作,包括初始化棋盘、初始化玩家、初始化AI等等。

在main函数中,我们通过调用下面四个模块的函数来构建整个游戏的逻辑流程。

2. chessboard模块负责棋盘的初始化、显示、落子、判断是否合法等逻辑处理。

该模块中定义了结构体变量用于存储棋盘信息。

在该模块中定义了落子的函数check(),该函数根据当前棋子的位置、颜色和棋盘状态进行判断,如果可以落子,则将当前棋子位置上色,并调用翻转棋子的函数reverse(),否则提示玩家重新输入坐标。

3. player模块负责玩家的初始化、操作、胜负判断等逻辑处理。

在该模块中定义了结构体变量用于存储玩家信息。

该模块中定义了getinput()函数,该函数根据玩家从键盘输入的信息获取当前落子的位置。

4. AI模块负责人工智能的实现,其中包括随机落子AI、进攻型AI、防守型AI 等。

在该模块中定义了结构体变量用于存储AI信息。

AI的实现方式采用了启发式搜索,寻找最优解。

同时,AI还要判断当前落子位置是否合法,如果不合法则重新进行随机落子。

负责一些通用函数的实现,如计算得分、判断胜负等等。

黑白翻转棋c课程设计

黑白翻转棋c课程设计

黑白翻转棋c课程设计一、课程目标知识目标:1. 学生能理解黑白翻转棋的基本规则,掌握游戏策略。

2. 学生能运用所学知识,分析黑白翻转棋的胜负关键因素。

3. 学生了解黑白翻转棋的发展历程及其在逻辑思维训练中的作用。

技能目标:1. 学生能运用所学策略进行黑白翻转棋的对弈,提高逻辑思维和判断能力。

2. 学生能通过团队合作,共同探讨黑白翻转棋的战术,培养沟通与协作能力。

3. 学生能运用所学知识,设计并分享独特的黑白翻转棋游戏策略。

情感态度价值观目标:1. 学生培养对黑白翻转棋的兴趣,激发学习积极性,形成良好的学习习惯。

2. 学生在游戏中学会尊重对手,遵循规则,培养公平竞争的意识。

3. 学生通过黑白翻转棋的学习,培养面对挑战的勇气,增强自信心。

本课程针对五年级学生,结合学科特点,以黑白翻转棋为载体,培养学生的逻辑思维、判断和沟通协作能力。

课程设计注重实践操作,使学生在轻松愉快的氛围中学习,提高学习兴趣和效果。

同时,关注学生的个性差异,鼓励学生分享自己的观点,激发创新思维。

通过本课程的学习,使学生达到以上所述的知识、技能和情感态度价值观目标。

二、教学内容1. 黑白翻转棋的基本概念与规则- 游戏棋盘与棋子- 游戏规则与胜负判定- 基本术语介绍2. 黑白翻转棋的策略与技巧- 基本策略:堵截、包围、扩展- 高级技巧:双线夹击、一线突破、棋型判断- 策略分析与运用3. 黑白翻转棋的对弈实践- 单人对弈:自主练习,提高个人技能- 双人对弈:实践策略,培养判断与应变能力- 团队对抗:分工协作,锻炼团队配合4. 黑白翻转棋的历史与文化- 游戏起源与发展- 国际比赛与知名选手- 黑白翻转棋与逻辑思维训练的关系教学内容按照课程目标进行组织,注重科学性和系统性。

本课程共分为四个部分,分别对应黑白翻转棋的基本知识、策略技巧、对弈实践以及历史与文化。

教学大纲明确教学内容安排和进度,结合教材相关章节,确保学生能够循序渐进地掌握所学知识。

黑白棋C语言课程设计

黑白棋C语言课程设计

运行结果:源码:#include<stdio.h>#include<math.h>int rule(int map[8][8],int x,int y,int order);////规则函数int judge(int map[8][8],int order);////判断函数void eat(int map[8][8],int x,int y,int order);//////吃子函数void refresh(int map[8][8]);/////刷新函数void main(){int x,y,order=1,count=0,can=0,end=2;int map[8][8]={0};map[3][3]=1;map[3][4]=-1;map[4][3]=-1;map[4][4]=1;/////-1 represent white 1 represent blackrefresh(map);while(end)/////如果双方同时不能落子则宣告结束{count=judge(map,order);if(order==1)printf("黑方下:");elseprintf("白方下:");if(count==0){printf("无法落子,请对方下\n");order=-order;end--;}else{end=2;scanf("%d %d",&x,&y);can=rule(map,x-1,y-1,order);if(can==0)printf("不符合落子规则\n");else{eat(map,x-1,y-1,order);order=-order;}}}printf(" game over\n");}int judge(int map[8][8],int order){int rule(int map[8][8],int x,int y,int order);int i,j,ju=0,n=0;for(i=0;i<8;i++)for(j=0;j<8;j++){n=rule(map,i,j,order);if(n>0){printf("横标%d竖标%d可以下子\n",i+1,j+1);ju++;}}return ju;}int rule(int map[8][8],int x,int y,int order){int arry[8][2]={{0,-1},{0,1},{-1,-1},{-1,0},{-1,1},{1,-1},{1,0},{1,1}};int i,ru=0,lx,ly;if(map[x][y]==0)////保证所下的子原来是空处{for(i=0;i<8;i++){lx=x+arry[i][0];ly=y+arry[i][1];if(map[lx][ly]!=-order)continue;while(map[lx][ly]==-order&&lx>-1&&ly>-1&&lx<8&&ly<8) {lx=lx+arry[i][0];ly=ly+arry[i][1];}if(map[lx][ly]==order&&lx>-1&&ly>-1&&lx<8&&ly<8)ru++;}}return ru;}void eat(int map[8][8],int x,int y,int order){void refresh(int map[8][8]);int arry[8][2]={{0,-1},{0,1},{-1,-1},{-1,0},{-1,1},{1,-1},{1,0},{1,1}};int i,lx,ly;for(i=0;i<8;i++){lx=x+arry[i][0];ly=y+arry[i][1];if(map[lx][ly]!=-order)continue;while(map[lx][ly]==-order&&lx>-10&&ly>-1&&lx<8&&ly<8){lx=lx+arry[i][0];ly=ly+arry[i][1];}if(map[lx][ly]==order&&lx>-1&&ly>-1&&lx<8&&ly<8){int m=0,n=0;if(lx-x!=0&&ly-y!=0){do{map[x+m][y+n]=order;m=m+(lx-x)/abs(lx-x);n=n+(ly-y)/abs(ly-y);}while(m!=lx-x);}else if(lx-x==0){do{map[x][y+n]=order;n=n+(ly-y)/abs(ly-y);}while(n!=ly-y);}else{do{map[x+m][y]=order;m=m+(lx-x)/abs(lx-x);}while(m!=lx-x);}}}refresh(map);}void refresh(int map[8][8]){int i,j,hei=0,bai=0;printf(" 1 2 3 4 5 6 7 8\n");printf(" +---+---+---+---+---+---+---+---+\n");for(i=0;i<8;i++){printf("%d",i+1);for(j=0;j<8;j++){switch(map[i][j]){case 0: printf(" | ");break;case 1: printf(" |○");hei++;break;///黑子case -1: printf(" |●");bai++;break;///白子}}printf(" |\n");printf(" +---+---+---+---+---+---+---+---+\n");}printf(" count of white %d\n count of black %d\n",bai,hei); }。

C语言课程设计黑白棋游戏

C语言课程设计黑白棋游戏

目录第1章课程设计的目的与要求 (1)1.1 课程设计目的 (1)1.2 课程设计的实验环境 (1)1.3 课程设计的预备知识 (1)1.4 课程设计要求 (1)第2章课程设计内容 (2)2.1程序功能介绍 (2)2.2程序整体设计说明 (3)2.2.1设计思路 (3)2.2.2数据结构设计及用法说明 (4)2.2.3程序结构(流程图) (6)2.2.4各模块的功能及程序说明 (8)2.2.5程序结果 (8)2.3程序源代码及注释 (9)第3章课程设计总结 (21)参考资料 (22)第1章课程设计的目的与要求1.1 课程设计目的本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》课程后进行的一次全面的综合练习。

本课程设计的目的和任务:1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力1.2 课程设计的实验环境硬件要求能运行Windows 2000/XP操作系统的微机系统。

C语言程序设计及相应的开发环境。

1.3 课程设计的预备知识熟悉C语言及C语言开发工具。

1.4 课程设计要求1. 分析课程设计题目的要求2. 写出详细设计说明3. 编写程序代码,调试程序使其能正确运行4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告第2章课程设计内容2.1程序功能介绍只有在可以吃到对方棋子的方格里落子。

吃子规则:采用夹吃的原则,左图用红色标记的是黑方可落子的位置。

当黑方落子之后,则夹在两黑子中间的白子都将变为黑子。

右图是落子后的棋盘布局,蓝色标记的是白方可落子的位置。

夹子的方向包含:水平、竖直、斜对角。

1.点击“新游戏”,将从新初始化棋局。

2.打开游戏存档,默认是.bwc文件3.保存当前游戏,默认扩展名为.bwc4.后退一步,即悔棋5.前进一步,只有在前面的操作存在后退的基础上,该按钮才有效。

黑白棋游戏

黑白棋游戏

《C语言程序设计》题目黑白棋游戏一、内容黑白棋黑白棋是一种两人对弈的纯策略型棋类游戏,黑白棋棋子分为黑白两色,棋盘为19×19,棋子放置于棋盘线交叉点上或网格中。

两人对局,各执一色,轮流下一子,先将横、竖或斜线的5个同色棋子连成不间断的一排者为胜。

本程序设计为人与人对弈,一方执黑棋,一方执白棋,轮流走棋,每方都试图在游戏结束前让自己的棋子五子相连,首先实现五子相连的一方获胜。

程序执行过程中,要求棋盘、棋子时时可见,并且人用输入坐标的操作模式,摆放棋子。

以下简析本程序流程::如表1所示,表中当前落子点坐标为(X,Y),i=X-4, j=Y-4,由获胜条件可以知,通过判断(X,Y)上、下、左、右、斜上、斜下八个方向上是否有连续的5个子即可得出是否获胜结果。

在游戏开始时,将棋盘初始化,即将棋盘抽象为一个19*19的数组,数组中每个元素设为某一指定初始值(如8)。

1P落子时,将数组内相应坐标处元素赋值为0;2P落子时,将数组内相应坐标处元素赋值为1。

当(X,Y) 上、下、左、右、斜上、斜下八个方向某5个连续的子所对应的数组中元素之和等于0时,1P获胜;当(X,Y) 上、下、左、右、斜上、斜下八个方向某5个连续的子所对应的数组中元素之和等于5时,2P获胜。

棋盘上的所有格子都被占满时,必有181个1P棋子和180个2P棋子,此时对应数组中所有项之和为180,并且游戏过程中对应数组中所有项之和只可能在这种状况下为180,所以可以用这一条件判断是否和棋。

i,j i+1,ji,j+1X,Y二、上机环境操作系统:Windows XP开发工具:VC6.0三、函数调用关系图图1 四、各函数功能说明1.main()主函数2. int win(int m, int l) 判断输赢界面3. void printState() 显示每次落子结果及棋盘设计4.p1win() 玩家1赢的界面5.p2win() 玩家2赢的界面6.heqi() 和棋界面7.void help() 帮助界面8.void StartGame() 初始化及指令输入main显示初始界面选择选择1,调用voidStartGame()选择2,调用void help()选择3返回原界面五、流程图六、程序运行效果图1.运行界面2.选择帮助界面图4 3.开始游戏界面图52.获胜界面图6 3.某方认输界面图7七、总结通过对各子程序的设计与优化,本程序完成了五子棋软件的主体的设计与制作,基本达到了使用五子棋软件的核心要求。

c语音黑白棋课程设计

c语音黑白棋课程设计

c语音黑白棋课程设计一、课程目标知识目标:1. 理解C语言的基本语法和程序结构,掌握基本数据类型、运算符、控制语句等编程知识。

2. 学习使用数组存储和管理黑白棋游戏的相关信息,理解游戏规则和逻辑。

技能目标:1. 能够运用C语言编写简单的黑白棋游戏程序,实现棋盘的初始化、玩家落子、判断胜负等功能。

2. 提高逻辑思维能力,学会分析问题、设计算法和解决编程中的问题。

情感态度价值观目标:1. 培养学生对编程的兴趣,激发学习热情,提高自主学习和解决问题的能力。

2. 培养团队协作意识,让学生在合作中学习、交流,共同完成游戏项目。

课程性质:本课程为实践性较强的学科,结合C语言编程和黑白棋游戏,旨在提高学生的编程能力和逻辑思维。

学生特点:学生已具备一定的计算机基础和编程知识,但对C语言的应用尚不熟练,需要通过实际操作来加深理解。

教学要求:注重理论与实践相结合,引导学生主动参与,培养学生的动手能力和实际操作技能。

将课程目标分解为具体的学习成果,以便在教学过程中进行有效指导和评估。

二、教学内容1. C语言基础知识回顾:变量、数据类型、运算符、控制结构(包括条件语句和循环语句)。

相关教材章节:第一章至第四章2. 数组的使用:一维数组、二维数组,数组在黑白棋游戏中的应用。

相关教材章节:第五章3. 函数的定义与调用:编写函数实现黑白棋的各个功能,如初始化棋盘、落子、判断胜负。

相关教材章节:第六章4. 游戏逻辑设计:介绍黑白棋的规则,分析游戏流程,设计算法实现游戏逻辑。

相关教材章节:项目实践部分5. 编程实践:结合所学知识,分步骤编写黑白棋游戏程序。

相关教材章节:项目实践部分6. 调试与优化:学会使用调试工具,对程序进行测试和优化,提高程序稳定性。

相关教材章节:第七章教学内容安排与进度:第1周:C语言基础知识回顾,数组的使用。

第2周:函数的定义与调用,游戏逻辑设计。

第3周:编程实践,实现黑白棋游戏基本功能。

第4周:调试与优化,完善游戏程序。

C语言课程设计 黑白棋课程设计

C语言课程设计 黑白棋课程设计

目录前言 (1)1.1关于C语言 (1)1.2关于课程设计 (1)1.3关于黑白棋 (1)工程概况 (1)2.1黑白棋的简要: (1)2.2可行性分析 (2)正文 (2)3.1摘要 (2)3.2设计目的和意义 (3)3.3设计目标与方案 (3)3.4设计方法 (3)3.5设计内容 (4)3.6对战函数 (8)3.7程序编写中遇到的问题 (11)4.1运行结果 (12)4.2设计创新与关键技术 (13)4.3设计心得 (14)有关说明 (14)5.1软件说明书 (14)致谢 (15)源程序 (16)前言1.1关于C语言C语言是国际上广泛流行的计算机高级语言,它适合作为系统描述语言,即可以用来编写系统软件,也可以编写应用软件。

在早期的操作系统软件主要是汇编语言编写的,但汇编语言依赖于计算机硬件程序的可读性和可移植性级语言,而C语言兼具一般语言优点还能克服其他语言的缺点[1]。

1.2关于课程设计学习计算机语言的唯一目的是应运,而应运要通过程序设计来体现的。

进行程序设计,需要很强的逻辑思维能力,是一种极富创造性的智力劳动。

这样可以认为,语言是一种技能,程序设计是一门科学[7]。

课程设计作为集中实践性教学环节,应着重提高学生的自学能力,独立分析、解决问题的能力和动手进行实验的能力[7]。

为了培养学生自学能力,对于设计或实验中可能碰到的重点、难点,只要通过典型分析和讲解,启发学生的思路和自学的方法,以便达到举一反三的作用。

设计中还要教给学生查阅资料、使用工具书的方法,让他们遇到问题时,不是立刻找老师,而是通过独立思考,查阅资料和书籍,自己寻找答案。

1.3关于黑白棋通过做《黑白棋游戏》让我初步学会了怎样编写程序,怎样使一个程序运行,黑白棋的游戏是要在一个8*8的网格中进行,而数组属于构造体类型,数组是具有相同数据类型的变量序列,序列中的每个变量成为元素,数组元素由一个统一标识的数组名和顺序好“下标”来表示。

故需要在游戏中定义一个二维数从而实现游戏的走棋、落棋、判断棋盘的变化等。

编程-C语言-课程设计-黑白棋

编程-C语言-课程设计-黑白棋
voidpdifneedautoload ()
//这个函数是读一下save的第一个数据(ifjieshu),如果结束了,认为不再需要自动读取,否则认为需要进行自动读取。
voidsave ()
//这是个储存几乎所有全局参量的函数,到save.txt
voidload ()
//这是个读取几乎所有全局参量的函数,从save.txt
voidloadx (wchar_t *place)
//这个函数是将*place转存到save.txt中,再将save读到内存
voidloadxx ()
//这个函数是根据loadcase进行读取,1、2、3分别对应save1.txt、save2.txt、save3.txt,然后对loadcase进行归1。
并且:首先,它会判断一下有没有点能走完之后使得对手欠手。如果有,直接走。其次,在临终局12步时,进入残局搜索,一搜到底。
搜索(二):
针对一个静态估价值的估价函数进行5步搜索估价,走子。
这个估价函数的主要原理就是角、边、其它地方的价格不再同一个数量级上,其他地方的价格之间有细微差距。
并且:首先,它会判断一下有没有点能走完之后使得对手欠手。如果有,直接走。其次,在临终局12步时,进入残局搜索,一搜到底。
搜索(三):
针对一个随输入棋盘情况的不同而动态调整估价值的估价函数进行5步搜索估价,走子。
这个估价函数就是复合估价的估价函数。
并且:首先,它会判断一下有没有点能走完之后使得对手欠手。如果有,直接走。其次,在临终局12步时,进入残局搜索,一搜到底。
二、分工说明:
1完成:
AI ai001 ()
ntwendingdian(qp qipan,int i,int j)

C黑白棋课程设计

C黑白棋课程设计

C 黑白棋课程设计一、课程目标知识目标:1. 学生能够理解黑白棋的起源、规则及基本策略;2. 学生掌握黑白棋的基本术语,如“活三”、“眠四”等;3. 学生了解黑白棋的数学原理,如博弈论、最优化算法等。

技能目标:1. 学生能够运用所学知识进行黑白棋对弈,并能在实战中灵活运用策略;2. 学生具备分析黑白棋局面的能力,能够判断形势、制定战术;3. 学生通过黑白棋训练,提高逻辑思维、判断与决策能力。

情感态度价值观目标:1. 学生培养对黑白棋的兴趣,热爱传统文化,传承经典;2. 学生在黑白棋的学习过程中,学会尊重对手,遵守规则,树立公平竞争的意识;3. 学生通过黑白棋对弈,锻炼意志力,培养面对挫折、勇于挑战的精神。

课程性质:本课程以黑白棋为载体,结合数学、逻辑思维等知识,旨在提高学生的综合素质。

学生特点:五年级学生具备一定的逻辑思维能力,对新事物充满好奇,但注意力集中时间较短,需要结合实际操作进行教学。

教学要求:教师需运用生动有趣的教学方法,引导学生积极参与,注重理论与实践相结合,提高学生的黑白棋技能和综合素质。

通过课程目标的分解与实现,使学生在知识、技能和情感态度价值观方面取得具体的学习成果。

二、教学内容1. 黑白棋的起源与发展:介绍黑白棋的历史背景,让学生了解其文化价值。

- 教材章节:第一章 概述- 内容列举:黑白棋的起源、发展、国际比赛及我国现状。

2. 黑白棋规则与术语:讲解黑白棋的基本规则、棋谱记录方法及常见术语。

- 教材章节:第二章 基本规则与术语- 内容列举:棋盘与棋子、落子规则、禁手、活棋、眠棋等。

3. 黑白棋基本策略与技巧:分析黑白棋的常见开局、中局、残局策略及技巧。

- 教材章节:第三章 策略与技巧- 内容列举:开局策略、防守与进攻、棋型判断、双活三、双眠四等。

4. 黑白棋对弈实践:组织学生进行黑白棋对弈,培养实战经验,提高技能。

- 教材章节:第四章 实战对弈- 内容列举:对弈技巧、实战分析、名局欣赏。

计算机技术基础(c语言)课程设计 黑白棋游戏

计算机技术基础(c语言)课程设计 黑白棋游戏

计算机技术基础课程设计C语言设计报告黑白棋游戏程序一、选题背景:随着电脑的普及以及人们对C语言的崇拜,用C语言编写一些简单的应用小程序解决实际问题变的越来越容易和方便。

平常学习有点累,就容易迷上网络游戏,所以就编写了一个小黑白棋游戏,闲暇的时候玩玩,既益智又娱乐,又不至于上瘾。

二、设计思想:运用了C语言的各种语句(如FOR循环语句,IF ELSE条件语句等)。

程序设计分三大部分:第一部分为选择界面,可选择为人机下棋和双人下棋;第二部分为程序运行部分,解决整个程序中的关键问题和算法;第三部分为结束部分,主要是输出文档和设计者的信息。

三.程序流程图四.程序清单:#include"graphics.h"#include"stdio.h"#define LEN sizeof(struct dian)#define NULL 0int dian[8][8],result[10][2]; /*dian[][]中存格子的状态,无子,黑子或白子*/ int N,M,s=0,K=0;int dx,dy,key;char COMPUTER=0;int computer=2;struct dian /*记录所有已经下的子的位置*/{int x;int y;struct dian *next;};struct dian a,*p1,*p,*head;void init(void) /*初始化*/{int gd=DETECT,gm;initgraph(&gd,&gm,"c:\\tc");cleardevice();}void jiemian1(void) /*第一个界面*/{setlinestyle(0,0,3);setcolor(RED);rectangle(1,1,640,480);setcolor(BLUE);rectangle(3,3,638,478);setcolor(YELLOW);rectangle(5,5,636,476);settextstyle(0,0,6);setcolor(WHITE);outtextxy(160,160,"HEI BAI");settextstyle(0,0,1);setcolor(BLUE);outtextxy(210,280,"press 1 to play with computer");outtextxy(210,320,"press 2 to play with another");do{ /*选择是和人玩还是和电脑下去*/ COMPUTER=bioskey(0);}while(COMPUTER!='1'&&COMPUTER!='2');cleardevice();}void qipan(void) /*画棋盘*/{int i;setlinestyle(0,0,3);setcolor(9);for(i=0;i<=160;i+=20){line(240,i+160,400,i+160);line(i+240,160,i+240,320);}}void insert(int x,int y) /*将下子的位置插入链表*/{struct dian *p2;p2=(struct dian*)malloc(LEN);p2->x=x; p2->y=y;p1->next=p2;p2->next=NULL;p1=p2;}void paint(int x,int y,int t) /*画棋子*/{setcolor(t);setlinestyle(0,0,1);circle(20*x+250,20*y+170,8);setfillstyle(SOLID_FILL,t);floodfill(20*x+250,20*y+170,t);}void jiemian2(void) /*下棋的界面*/{int i,j;for(i=0;i<8;i++)for(j=0;j<8;j++)dian[i][j]=1;setcolor(8);rectangle(236,156,404,324);setfillstyle(SOLID_FILL,6);bar(238,158,402,322);setcolor(3);rectangle(8,8,160,378);bar(10,10,158,376);settextstyle(0,0,1);outtextxy(20,20,"LEFT : change");outtextxy(20,50,"RIGHT : change");outtextxy(20,80,"ENTER: play");outtextxy(20,110,"ESC : leave");setcolor(RED);outtextxy(20,200,"anything wrong?");outtextxy(40,220,"E-mail me:");outtextxy(12,245,"renren3052@");qipan();a.x=3;a.y=3;a.next=NULL;dian[3][3]=0; /*刚开局时候棋盘上的四个棋子*/ p=head=&a;p1=&a;paint(3,3,0);insert(3,4);paint(3,4,7); dian[3][4]=7;insert(4,3);paint(4,3,7); dian[4][3]=7;insert(4,4);paint(4,4,0); dian[4][4]=0;}void shine(int x,int y,int t) /*棋子闪烁*/{static int i=0,j=0;if(i==x&&j==y) return 0;do{paint(x,y,t);delay(50000);paint(x,y,6);delay(50000);}while(!kbhit());key=bioskey(0);i=x;j=y;}void scan(int x,int y,int t) /*查找可以下子的位置或是要变颜色的棋子*/{int b,c,d,e,i,j,m,n,r;K=0;if(dian[x][y]==1) r=1;else r=t;b=x-1; c=x+1; d=y-1; e=y+1;if(b<0) b=0; /*查一个子如黑子四周格子的情况,有可能出边界,把边界限制一下*/ if(c>7) c=7;if(d<0) d=0;if(e>7) e=7;for(i=b;i<=c;i++)for(j=d;j<=e;j++){if(dian[i][j]==t||dian[i][j]==1) continue;dx=i-x;dy=j-y;m=i;n=j;while(dian[m][n]==s){m+=dx;n+=dy;}if(dian[m][n]==r) continue;if(m<0||m>7||n<0||n>7) continue;result[K][0]=m;result[K][1]=n;K++;}}void vary(int x,int y,int t) /*下子,插入链表,查找并改变需要改变颜色的棋子*/{int i,m,n;if(t==0) N+=1;else M+=1;paint(x,y,t);insert(x,y);scan(x,y,t);dian[x][y]=t;for(i=0;i<K;i++){dx=result[i][0]-x;dy=result[i][1]-y;if(dx==0) dx=0;else dx=dx/abs(dx);if(dy==0) dy=0;else dy=dy/abs(dy);m=x; n=y; m+=dx; n+=dy;do{if(t==0) { N++; M--;}else { M++; N--;}paint(m,n,t);dian[m][n]=t;m+=dx; n+=dy;}while(dian[m][n]!=t);}}void presskey(int t) /*按键*/{int i;for(i=0;i<K;i++){if(computer) /*如果和电脑下并且这一步不是电脑下*/do{shine(result[i][0],result[i][1],t); /*闪烁棋子*/}while(key!=0x4b00&&key!=0x4d00&&key!=0x1c0d&&key!=0x011b);/*如果没有按键继续闪烁*/if(computer==0){srand(time(NULL)); /*电脑下棋随机选择下哪个位置*/i=rand()%K;}if(computer==0||key==0x1c0d){vary(result[i][0],result[i][1],t);break;}if(key==0x011b) exit(0); /*如果按ESC离开游戏*/}}void run(int t) /*游戏运行*/{int i;if(t==0) s=7;if(t==7) s=0;a: p=head;do{if(dian[p->x][p->y]==s) continue;scan(p->x,p->y,t); /*查找可以下子的地方并存在result数组中*/ if(K==0) continue;presskey(t);if(computer==0||key==0x1c0d) break;}while((p=p->next)!=NULL);if(key==0x4b00||key==0x4d00) goto a;}void score(void) /*显示分数*/{char str1[4],str2[4];setlinestyle(SOLID_LINE,0,THICK_WIDTH);setcolor(3);rectangle(4,4,636,476);setcolor(4);rectangle(6,6,634,474);setfillstyle(SOLID_FILL,YELLOW);rectangle(8,380,632,472);setcolor(9);rectangle(10,382,630,470);bar(12,384,628,468);settextstyle(0,0,2);setcolor(6);outtextxy(280,400,"score");sprintf(str1,"%d",N);sprintf(str2,"%d",M);outtextxy(120,430,"PLAYER1");outtextxy(260,430,str1);outtextxy(300,430,":");outtextxy(330,430,str2);if(COMPUTER=='1') outtextxy(390,430,"COMPUTER"); else outtextxy(390,430,"PLAYER2");}void winer(void) /*胜利显示*/{settextstyle(0,0,4);setcolor(9);if(N>M) outtextxy(200,50,"player1 win!");else if(N<M) outtextxy(200,50,"player2 win!");else outtextxy(200,50,"no winer!");}void soundG(void) /*结束声音*特色哦!* */{int i;for(i=20;i<=1000;i++){sound(i);delay(1500);nosound();}}void closeG() /*游戏结束*/{int i;cleardevice();settextstyle(1,0,6);setcolor(YELLOW);outtextxy(25,180,"Thanks to my teacher!");for(i=0;i<=1000;i++){delay(1500);}cleardevice();settextstyle(1,0,5);setcolor(WHITE);outtextxy(120,50,"Programme Desiged:"); outtextxy(230,120,"Xiao Wen");outtextxy(35,250,"E-mail:renren3052@"); outtextxy(190,330,"QQ:574973988");outtextxy(228,410,"2007.01.01");getch();closegraph();}main(){int i;init();jiemian1();cleardevice();N=2; M=2;jiemian2();do{if(COMPUTER=='1'){if(s==0) computer=1;else computer=0;}score();run(s);}while(N+M!=64||N==0||M==0);score();winer();settextstyle(0,0,1);outtextxy(310,95,"Do you like it?");outtextxy(260,125,"I am xiaowen.From 050606"); soundG();closeG();}五.主要解决问题的方法及技术关键:1.主要解决问题:用各种语句实现棋盘函数,下子位置链表插入函数,画棋子函数,下棋界面函数,棋子闪烁函数,下子位置函数,按键函数,运行函数,显示分数函数,胜负函数,声音函数等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

辽宁工业大学C语言程序设计课程设计(论文)题目:黑白棋游戏院(系):软件学院专业班级:计算机信息管理学号: *********学生姓名: 000 0指导教师: 000 00教师职称:助教起止时间: 2008.12.22至2009.1.2课程设计(报告)任务及评语目录第1章课程设计的目的与要求 (1)1.1 课程设计目的 (1)1.2 课程设计的实验环境 (1)1.3 课程设计的预备知识 (1)1.4 课程设计要求 (1)第2章课程设计内容 (2)2.1程序功能介绍 (2)2.2程序整体设计说明 (3)2.2.1设计思路 (3)2.2.2数据结构设计及用法说明 (4)2.2.3程序结构(流程图) (6)2.2.4各模块的功能及程序说明 (8)2.2.5程序结果 (8)2.3程序源代码及注释 (9)第3章课程设计总结 (21)参考资料 (22)第1章课程设计的目的与要求1.1 课程设计目的本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》课程后进行的一次全面的综合练习。

本课程设计的目的和任务:1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力1.2 课程设计的实验环境硬件要求能运行Windows 2000/XP操作系统的微机系统。

C语言程序设计及相应的开发环境。

1.3 课程设计的预备知识熟悉C语言及C语言开发工具。

1.4 课程设计要求1. 分析课程设计题目的要求2. 写出详细设计说明3. 编写程序代码,调试程序使其能正确运行4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告第2章课程设计内容2.1程序功能介绍只有在可以吃到对方棋子的方格里落子。

吃子规则:采用夹吃的原则,左图用红色标记的是黑方可落子的位置。

当黑方落子之后,则夹在两黑子中间的白子都将变为黑子。

右图是落子后的棋盘布局,蓝色标记的是白方可落子的位置。

夹子的方向包含:水平、竖直、斜对角。

1.点击“新游戏”,将从新初始化棋局。

2.打开游戏存档,默认是.bwc文件3.保存当前游戏,默认扩展名为.bwc4.后退一步,即悔棋5.前进一步,只有在前面的操作存在后退的基础上,该按钮才有效。

6.“与或图”按钮,当选择与或法与电脑博弈时会显示与或图。

7.点击设置按钮后,会出现以下对话框,可以修改设置,点击确定按钮后生效。

2.2程序整体设计说明程序设计的组成框图:吃子规则:采用夹吃的原则,左图用红色标记的是黑方可落子的位置。

当黑方落子之后,则夹在两黑子中间的白子都将变为黑子。

右图是落子后的棋盘布局,蓝色标记的是白方可落子的位置。

夹子的方向包含:水平、竖直、斜对角2.2.1设计思路从程序表面看,这是一个二维平面图,所以数据用二维数组来表示,数组两个下标可以表示棋盘上的位置,数组元素的值代表棋格上的状态,共有三种情况,分别是0代表空格,1代表白棋,2代表黑棋。

这样程序的主要工作是接收棋手按键操作,棋手用Up、Down、Left、Right控制光标移动,回车键表示落子。

如果无棋可走则显示停步信息。

一旦接收到回车键或空格键,说明棋手落子,先判断是否是有效位置,也就是说已经有棋子的位置不能重叠落子,然后再判断该位置能否吃掉对方的棋子(根据黑白棋的游戏规则,只能将棋子落子能吃掉对方棋子的位置上),如果条件满足则在该位置落子,落子时执行这样几个步骤,先调用画棋子函数,将棋盘的相应位置上画上棋子,再调用吃棋子函数,将对手的棋子变成自己颜色的棋子,然后根据吃掉对手棋子的个数,给自己加上相应的分数和给对手减去相应的分数,再将数组中的相应元素赋值,标志该位置已经落子,最后将落子的权限交给对手。

2.2.2数据结构设计及用法说明在主函数中,通过调用绘制棋盘、棋手对战,判断棋盘变化、改变棋子颜色等函数的调用来实现主函数的相应的功能,以下是有关于主函数的流程图。

绘制棋盘和初始棋子rawQp棋手对战 playtoplay判断棋盘变化(能否分出胜负)QpChange计算棋手的成绩输出胜利者信息Y1DrawQp绘制棋盘和初始棋子在界面上绘制320*320的棋盘,并在棋盘中绘制8*8的格子,初始棋子2SetPlay设置棋子第一次的颜色先走棋者持白子,后走棋黑子,每次交替3Playtoplay人人对战函数俩棋手交替走棋,定义键盘操作等4MoveColor恢复原来棋盘状态棋子由初始位置到落子位置的路径不改变颜色5QpChange判断棋盘的变化改变棋子的颜色走棋后判断棋盘的变化情况,根据变化情况判断是否可以输出分数6DoScore处理分数根据棋盘上旗子的多少进行分数的处理2.2.3程序结构(流程图)(1)落棋位置判断:(2)输出成绩:(3)输出最后的胜利者结果:2.2.4各模块功能及程序说明落棋位置的判断模块:判断落子后棋盘的变化,判断棋手的落棋位置和次数,两方交换走棋。

成绩输出模块:判断输出哪个棋手的分,在不同的位置输出,清空成绩,判断哪方胜利。

输出胜利者信息模块:开始判断最后的结果,将两人分数分别输出。

2.2.5程序结果一方执黑棋,一方执白棋,轮流走棋,每方都试图在游戏结束前让自己棋子的数目多于对方。

按键盘上的方向键可以上下左右移动棋子,按回车键可以摆放棋子。

下到最后谁的棋子多,谁赢。

2.3程序源代码及注释[size=12px]#include "graphics.h" /*图形系统头文件*/#define LEFT 0x4b00 /*光标左键值*/#define RIGHT 0x4d00 /*光标右键值*/#define DOWN 0x5000 /*光标下键值*/#define UP 0x4800 /*光标上键值*/#define ESC 0x011b /* ESC键值*/#define ENTER 0x1c0d /* 回车键值*/int a[8][8]={0},key,score1,score2;/*具体分数以及按键与存放棋子的变量*/char playone[3],playtwo[3];/*两个人的得分转换成字符串输出*/void playtoplay(void);/*人人对战函数*/void DrawQp(void);/*画棋盘函数*/void SetPlayColor(int x);/*设置棋子第一次的颜色*/void MoveColor(int x,int y);/*恢复原来棋盘状态*/int QpChange(int x,int y,int z);/*判断棋盘的变化*/void DoScore(void);/*处理分数*/void PrintScore(int n);/*输出成绩*/void playWin(void);/*输出胜利者信息*//******主函数*********/void main(void){Int00wq 1 initgraph(&gd,&gr,"c:\\tc"); /*初始化图形系统*/Dra]p]();/*画棋盘*/playtoplay();/*人人对战*/getch();closegraph();/*关闭图形系统*/}void DrawQp()/*画棋盘*/{int i,j;score1=score2=0;/*棋手一开始得分都为0*/setbkcolor(BLUE);for(i=100;i<=420;i+=40){line(100,i,420,i);/*画水平线*/line(i,100,i,420); /*画垂直线*/}setcolor(0);/*取消圆周围的一圈东西*/setfillstyle(SOLID_FILL,15);/*白色实体填充模式*/ fillellipse(500,200,15,15); /*在显示得分的位置画棋*/ setfillstyle(SOLID_FILL,8); /*黑色实体填充模式*/ fillellipse(500,300,15,15);a[3][3]=a[4][4]=1;/*初始两个黑棋*/a[3][4]=a[4][3]=2;/*初始两个白棋*/setfillstyle(SOLID_FILL,WHITE);fillellipse(120+3*40,120+3*40,15,15);fillellipse(120+4*40,120+4*40,15,15);setfillstyle(SOLID_FILL,8);fillellipse(120+3*40,120+4*40,15,15);fillellipse(120+4*40,120+3*40,15,15);score1=score2=2; /*有棋后改变分数*/DoScore();/*输出开始分数*/}void playtoplay()/*人人对战*/{int x,y,t=1,i,j,cc=0;while(1)/*换棋手走棋*/{x=120,y=80;/*每次棋子一开始出来的坐标,x为行坐标,y为列坐标*/ while(1) /*具体一个棋手走棋的过程*/{PrintScore(1);/*输出棋手1的成绩*/PrintScore(2);/*输出棋手2的成绩*/SetPlayColor(t);/*t变量是用来判断棋手所执棋子的颜色*/ fillellipse(x,y,15,15);key=bioskey(0);/*接收按键*/if(key==ESC)/*跳出游戏*/break;elseif(key==ENTER)/*如果按键确定就可以跳出循环*/{if(y!=80&&a[(x-120)/40][(y-120)/40]!=1&&a[(x-120)/40][(y-120)/40]!=2)/*如果落子位置没有棋子*/{if(t%2==1)/*如果是棋手1移动*/a[(x-120)/40][(y-120)/40]=1;else/*否则棋手2移动*/a[(x-120)/40][(y-120)/40]=2;if(!QpChange(x,y,t))/*落子后判断棋盘的变化*/{a[(x-120)/40][(y-120)/40]=0;/*恢复空格状态*/cc++;/*开始统计尝试次数*/if(cc>=64-score1-score2) /*如果尝试超过空格数则停步*/{MoveColor(x,y);fillellipse(x,y,15,15);break;}elsecontinue;/*如果按键无效*/}DoScore();/*分数的改变*/break;/*棋盘变化了,则轮对方走棋*/}else/*已经有棋子就继续按键*/continue;}else /*四个方向按键的判断*/if(key==LEFT&&x>120)/*左方向键*/{MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);x-=40;fillellipse(x,y,15,15);}elseif(key==RIGHT&&x<400&&y>80)/*右方向键*/ {MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);x+=40;fillellipse(x,y,15,15);}elseif(key==UP&&y>120)/*上方向键*/{MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);y-=40;fillellipse(x,y,15,15);}elseif(key==DOWN&&y<400)/*下方向键*/{MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);y+=40;fillellipse(x,y,15,15);}}if(key==ESC)/*结束游戏*/break;if((score1+score2)==64||score1==0||score2==0)/*格子已经占满或一方棋子为0判断胜负*/{playWin();/*输出最后结果*/break;}t=t%2+1; /*一方走后,改变棋子颜色即轮对方走*/cc=0; /*计数值恢复为0*/} /*endwhile*/}void SetPlayColor(int t)/*设置棋子颜色*/{if(t%2==1)setfillstyle(SOLID_FILL,15);/*白色*/elsesetfillstyle(SOLID_FILL,8);/*灰色*/}void MoveColor(int x,int y)/*走了一步后恢复原来格子的状态*/{if(y<100)/*如果是从起点出发就恢复蓝色*/setfillstyle(SOLID_FILL,BLUE);else/*其他情况如果是1就恢复白色棋子,2恢复黑色棋子,或恢复蓝色棋盘*/ switch(a[(x-120)/40][(y-120)/40]){case 1:setfillstyle(SOLID_FILL,15);break; /*白色*/case 2:setfillstyle(SOLID_FILL,8);break; /*黑色*/default:setfillstyle(SOLID_FILL,BLUE); /*蓝色*/}}int QpChange(int x,int y,int t)/*判断棋盘的变化*/{int i,j,k,kk,ii,jj,yes;yes=0;i=(x-120)/40; /*计算数组元素的行下标*/j=(y-120)/40; /*计算数组元素的列下标*/SetPlayColor(t);/*设置棋子变化的颜色*//*开始往8个方向判断变化*/if(j<6)/*往右边*/{for(k=j+1;k<8;k++)if(a[k]==a[j]||a[k]==0)/*遇到自己的棋子或空格结束*/ break;if(a[k]!=0&&k<8){for(kk=j+1;kk<K&&K{a[kk]=a[j]; /*改变棋子颜色*/fillellipse(120+i*40,120+kk*40,15,15);}if(kk!=j+1) /*条件成立则有棋子改变过颜色*/yes=1;}}if(j>1)/*判断左边*/{for(k=j-1;k>=0;k--)if(a[k]==a[j]||!a[k])break;if(a[k]!=0&&k>=0){for(kk=j-1;kk>k&&k>=0;kk--){a[kk]=a[j];fillellipse(120+i*40,120+kk*40,15,15);}if(kk!=j-1)yes=1;}}if(i<6)/*判断下边*/{for(k=i+1;k<8;k++)if(a[k][j]==a[j]||!a[k][j])break;if(a[k][j]!=0&&k<8){for(kk=i+1;kk<K&&K{a[kk][j]=a[j];fillellipse(120+kk*40,120+j*40,15,15); }if(kk!=i+1)yes=1;}}if(i>1)/*判断上边*/{for(k=i-1;k>=0;k--)if(a[k][j]==a[j]||!a[k][j])break;if(a[k][j]!=0&&k>=0){for(kk=i-1;kk>k&&k>=0;kk--){a[kk][j]=a[j];fillellipse(120+kk*40,120+j*40,15,15); }if(kk!=i-1)yes=1;}}if(i>1&&j<6)/*右上*/{for(k=i-1,kk=j+1;k>=0&&kk<8;k--,kk++) if(a[k][kk]==a[j]||!a[k][kk])break;if(a[k][kk]&&k>=0&&kk<8){for(ii=i-1,jj=j+1;ii>k&&k>=0;ii--,jj++) {a[ii][jj]=a[j];fillellipse(120+ii*40,120+jj*40,15,15); }if(ii!=i-1)yes=1;}}if(i<6&&j>1)/*左下*/{for(k=i+1,kk=j-1;k<8&&kk>=0;k++,kk--) if(a[k][kk]==a[j]||!a[k][kk])break;if(a[k][kk]!=0&&k<8&&kk>=0){for(ii=i+1,jj=j-1;ii<K&&K{a[ii][jj]=a[j];fillellipse(120+ii*40,120+jj*40,15,15); }if(ii!=i+1)yes=1;}}if(i>1&&j>1)/*左上*/{for(k=i-1,kk=j-1;k>=0&&kk>=0;k--,kk--) if(a[k][kk]==a[j]||!a[k][kk])break;if(a[k][kk]!=0&&k>=0&&kk>=0){for(ii=i-1,jj=j-1;ii>k&&k>=0;ii--,jj--) {a[ii][jj]=a[j];fillellipse(120+ii*40,120+jj*40,15,15); }if(ii!=i-1)yes=1;}}if(i<6&&j<6)/* 右下*/{for(k=i+1,kk=j+1;kk<8&&kk<8;k++,kk++) if(a[k][kk]==a[j]||!a[k][kk])break;if(a[k][kk]!=0&&kk<8&&k<8){for(ii=i+1,jj=j+1;ii<K&&K{a[ii][jj]=a[j];fillellipse(120+ii*40,120+jj*40,15,15);}if(ii!=i+1)yes=1;}}return yes;/*返回是否改变过棋子颜色的标记*/ }void DoScore()/*处理分数*/{int i,j;score1=score2=0;/*重新开始计分数*/for(i=0;i<8;i++)for(j=0;j<8;j++)if(a[j]==1)/*分别统计两个人的分数*/score1++;elseif(a[j]==2)score2++;}void PrintScore(int playnum)/*输出成绩*/ {if(playnum==1)/*清除以前的成绩*/{setfillstyle(SOLID_FILL,BLUE);bar(550,100,640,400);}setcolor(RED);settextstyle(0,0,4);/*设置文本输出样式*/if(playnum==1)/*判断输出哪个棋手的分,在不同的位置输出*/ {sprintf(playone,"%d",score1);outtextxy(550,200,playone);}else{sprintf(playtwo,"%d",score2);outtextxy(550,300,playtwo);}setcolor(0);}void playWin()/*输出最后的胜利者结果*/{settextstyle(0,0,4);setcolor(12);if(score2>score1)/*开始判断最后的结果*/outtextxy(100,50,"black win!");elseif(score2outtextxy(100,50,"white win!");elseouttextxy(60,50,"you all win!");}第3章课程设计总结通过本次C程序课程设计,我觉得对自己提高很大:克服了的偷懒的毛病,这在我以后的学习和工作中的心理定位与调节有很大的帮助。

相关文档
最新文档