井字棋游戏课程设计总结报告文件
数据结构课程设计报告---井字棋游戏

课程设计报告课程设计名称:数据结构课程设计题目:井字棋游戏年级:专业:姓名:指导老师:完成时间:目录1. 课程设计任务 (3)2. 系统设计 (3)2.1设计目标 (3)2.2 模块划分 (3)2.3 设计思想 (3)3. 算法描述 (4)4. 测试结果 (12)5. 分析与探讨 (13)6、总结 (13)7. 参考文献 (13)附录1 课程设计人员任务安排 (14)附录2 考核评定 (15)附录3 程序源代码 (16)1、课程设计任务设计井字棋游戏,可以实现人机互动下棋,棋盘界面友好,操作方便,系统自动判别胜利失败或平局,游戏结束,返回初始界面。
2、系统设计1.设计目标:设计出棋盘界面,实现人机互动下棋,显示对局结果。
设计思想:首先玩家下棋,打印棋盘,来显示玩家下棋的位置然后将玩家下完的棋盘数组传给咱们的胜负判断函数进行判断(电脑下棋同理),ret变量接收返回来的值,如果是字符 C 则游戏继续,如果其他字符跳出循环,来进行相应的判断,判断玩家的胜负或者平局。
2.模块划分:开始游戏棋盘初始化人机博弈胜负判断3.设计思想开始界面玩家可以选择开始游戏或者退出游戏,如果选择进行游戏则开始棋盘初始化,棋盘打印函数输出一个空白棋盘,棋子的摆放利用二维数组,机器人的落子由srand函数和rand函数来输出随机数,利用while的循环函数来判断落子位置是否已经被棋子占据。
胜负判断设置iswin函数以及isfull函数,,使用了两个 for 循环,五个 if 判断语句,井字棋的输赢是看每一行是否有三个相同的棋子或者两条对角线线上是否有三个相同的棋子。
3、算法描述1.函数调用模块:game函数是核心,里面概括了棋盘打印,下棋方法,电脑下棋方法,以及胜负判断条件。
void game(){char ret = 0;//创建棋盘char board[ROW][COL] = { 0 };//初始化棋盘Initboard(board, ROW, COL);//打印棋盘Displayboard(board, ROW, COL);while (1){//玩家下棋Playermove(board, ROW, COL);Displayboard(board, ROW, COL);//判断玩家赢ret = IsWin(board, ROW, COL);if (ret != 'C'){break;}//电脑下棋Computermove(board, ROW, COL);Displayboard(board, ROW, COL);//判断电脑赢ret = IsWin(board, ROW, COL);if (ret != 'C')break;}}if (ret == '*'){printf("你赢啦!\n");}else if (ret == '#'){printf("你输啦!真笨\n");}else{printf("平局\n");}}void menu(){printf("********************************\n");printf("********* 1.开始游戏 *********\n");printf("********* 0.退出游戏 *********\n");printf("********************************\n"); }void test(){int input = 0;srand((unsigned int)time(NULL));do{menu();printf("请选择: ");scanf("%d",&input);switch(input)case 1:printf("井字棋开始了!\n");game();break;case 0:printf("已退出游戏!\n");break;default:printf("选择错误!请重新选择!\n");break;}} while (input);}int main(){test();return 0;}2.棋盘初始化:使用二维数组的数据结构来建立一个棋盘void Initboard(char board[ROW][COL], int row, int col) //初始化棋盘{for (int i = 0; i < row; i++){for (int j = 0; j < col; j++){board[i][j] = ' ';}}}3.棋盘打印函数:构建一个简单的3*3棋盘轮廓void Displayboard(char board[ROW][COL], int row, int col) //打印棋盘{int i = 0;for (i = 0; i < row; i++){int j = 0;for (j = 0; j < col; j++){printf(" %c ", board[i][j]);if (j < col - 1)printf("|");}printf("\n");if (i < col - 1){for (j = 0; j < col; j++){printf("---");if (j < col - 1){printf("|");}}}printf("\n");}4.游戏进行中:(玩家下棋)void Playermove(char board[ROW][COL], int row, int col) //玩家下棋{int x = 0;int y = 0;printf("请玩家下子!\n");while (1){printf("请输入坐标:");//判断x,y坐标的合法性scanf("%d%d",&x,&y);if (x >= 1 && x <= row && y >= 1 && y <= col){if (board[x - 1][y - 1] == ' '){board[x - 1][y - 1] = '*';break;}else{printf("该坐标已被占用");}}else{printf("输入坐标非法,请重新输入!\n");}}}5.游戏进行中:(电脑下棋rand函数提供随机值)void Computermove(char board[ROW][COL], int row, int col) {int x = 0;int y = 0;printf("轮到电脑走!\n");while (1){x = rand() % row;y = rand() % col;if (board[x][y] == ' '){board[x][y] = '#';break;}}}6.对局结果判断函数://返回1满了//返回2没满int IsFull(char board[ROW][COL], int row, int col){int i = 0;int j = 0;for (i = 0; i < row; i++){for (j = 0; j < col; j++){if (board[i][j] == ' '){return 0;//没满}}}return 1;//满了}char IsWin(char board[ROW][COL], int row, int col){int i = 0;for (i = 0; i < row; i++){//判断一行上是否有三个相同的if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' '){return board[i][1];}}for (i = 0; i < col; i++){//判断一列上是否有三个相同的if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' '){return board[1][i];}}//两条对角线if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' '){return board[1][1];}if (board[2][0] == board[1][1] && board[1][1] == board[0][2] && board[1][1] != ' '){return board[1][1];}if (1 == IsFull(board, ROW, COL)){return 'Q';}return 'C';}7.接受返回值并输出结果:while (1){//玩家下棋Playermove(board, ROW, COL);Displayboard(board, ROW, COL);//判断玩家赢ret = IsWin(board, ROW, COL);if (ret != 'C'){break;}//电脑下棋Computermove(board, ROW, COL);Displayboard(board, ROW, COL);//判断电脑赢ret = IsWin(board, ROW, COL);if (ret != 'C'){break;}}if (ret == '*'){printf("You Win!\n");}else if (ret == '#'){printf("You Lose!\n");}else{printf("No One Win!\n");}}8.头文件参考网上教程设置宏#include <stdio.h>#include <stdlib.h>#include <time.h>#define ROW 3#define COL 3void Initboard(char board[ROW][COL], int row, int col); void Displayboard(char board[ROW][COL], int row, int col);void Playermove(char board[ROW][COL], int row, int col); void Computermove(char board[ROW][COL],int row, int col); //1.玩家赢 "*"//2.电脑赢 "#"//3.平局了 "Q"//4.继续 "C"char IsWin(char board[ROW][COL], int row, int col);4、测试结果测试环境:vs2010测试用例:玩家输入坐标:(2,1)(2,2)(1,1)(1,2)测试结果:玩家失败电脑获胜5、分析与探讨在人机博弈的过程中,电脑只能随机确定棋子落位,无法自主将棋子放在最优位置,若要实现电脑的落子智能化,还需对于电脑下棋的过程中增添进一步的判断。
幼儿园小班井字棋游戏教案及反思

幼儿园小班井字棋游戏教案及反思教案标题:幼儿园小班井字棋游戏教案及反思教学目标:1. 帮助幼儿了解井字棋游戏规则,并能正确操作棋子。
2. 培养幼儿的逻辑思维能力和决策能力。
3. 提升幼儿的合作与竞争意识。
教学准备:1. 井字棋游戏棋盘和棋子。
2. 幼儿园小班学生的座位布置成游戏桌。
3. 图片或视频展示井字棋游戏规则。
4. 准备奖品作为激励。
5. 记录幼儿游戏过程的观察表格。
教学步骤:引入活动:1. 展示井字棋游戏图片或视频,引起幼儿的兴趣。
2. 向幼儿介绍井字棋游戏的规则和目标。
游戏规则讲解:1. 将幼儿分成小组,每组两人。
2. 解释游戏棋盘的规则和棋子的使用方法。
3. 演示一局井字棋游戏,让幼儿理解游戏过程。
实践操作:1. 让每个小组选择一个代表开始游戏。
2. 每位幼儿轮流在棋盘上放置自己的棋子,直到有一方完成三个连成一线。
3. 引导幼儿逐渐独立思考和决策。
游戏总结:1. 让每个小组分享他们的游戏经验和策略。
2. 引导幼儿思考游戏中的胜利和失败,以及如何从中学习。
反思:1. 观察幼儿在游戏中的表现,记录他们的参与度、合作和竞争意识等方面的观察结果。
2. 根据观察结果,分析幼儿的优势和改进空间,并提供相应的指导和建议。
拓展活动:1. 鼓励幼儿设计自己的井字棋游戏规则。
2. 组织井字棋比赛,让幼儿展示他们的技巧和策略。
教案反思:这个教案在引入活动部分通过展示图片或视频,成功引起了幼儿的兴趣。
游戏规则讲解部分的演示也有助于幼儿理解游戏过程。
在实践操作中,幼儿有机会独立思考和决策,培养了他们的逻辑思维能力。
游戏总结部分的分享和思考有助于幼儿从游戏中学习并提升自己。
在反思部分,观察和记录幼儿的表现是很重要的,可以帮助教师了解幼儿的发展情况并提供个性化的指导。
总体来说,这个教案在培养幼儿的逻辑思维能力、决策能力和合作与竞争意识方面有很好的效果。
通过拓展活动的设计,还可以进一步激发幼儿的创造力和想象力。
井字棋实验报告

井字棋实验报告篇一:井字棋实验报告课程:班别小组成员人工智能原理及其应用12商本学号及姓名指导老师实验02井字棋1、总体要求:1.1总体功能要求:利用不同的方法,实现人机对战过程中呈现出不同程度的智能特征:(1)利用极大极小算法、α-β剪枝来提高算法的效率。
(2)使用高级语言,编写一个智能井字棋游戏。
(3)结合极大极小算法的使用方法和α-β剪枝,让机器与人对弈时不但有智能的特征,而且计算的效率也比较高。
1.2.开发平台要求:开发者开发的软件必须能够在不同系统的电脑上正常运行,因此开发平台为:开发环境:JDK1.6开发工具和技术体系:为了此游戏能够很好的在不同系统中运行,因选择javaee进行开发,利用eclipse1.3项目管理要求:(1)项目程序编写过程中要适当的写一些注释,以便下次作业时能够快速的上手和以后的修改:(2)项目程序要保存在一个固定的工作区间;(3)确保代码不要太多冗余2、需求分析:2.1软件的用户需求:井字棋游戏的用户希望游戏除了有一般的功能之外,还可以通过极大极小算法、α-β剪枝等方法是的井字棋游戏能够拥有智能特征,并是的电脑在人机对弈的过程中因玩家的难度选择而体现不同程度的智能状况。
2.2软件的功能需求:本游戏需要实现功能有:(1)游戏的重新设置(2)游戏统计(如:人赢的次数、电脑赢的次数等)(3)游戏的退出(4)不同智能程度下(脑残、懵懂、正常、智能),人机对弈(5)既可以选择难度,也可以选择谁走第一步(人or电脑) 2.3软件的性能需求:井字棋游戏需要以图形界面的形式表现出来,通过点击图标就可以进入游戏;在游戏进行时,人机对弈时电脑能够快速的反应并根据人的上一步动作作出,通过选择“脑残、懵懂、正常、智能”难度选择,电脑以不同程度的智能与人进行游戏对弈。
2.4 运行环境:能够运行java程序的环境(装有jdk 或者jre)2.5 用户界面设计:用gridlayout进行用户界面的设计把界面中分为不同的模块。
C++课程设计报告实验报井字游戏

测控技术与仪器2012级C++课程设计实验报告井字游戏班级:学号::日期:2014.1.8目录一、课程设计目的二、课程设计容与实现的功能1、课程设计容2、设计思想3、实现的功能三、系统的设计四、用户手册五、算法流程图六、源程序七、参考文献一、课程设计目的进行C++面向对象程序设计课程设计主要是在学习C++这门面向对象语言的基础上,在完成C++面向对象程序设计各部分实验的基础上,掌握一种可视化编程的方法,并通过实践加深对可视化编程与C++面向对象程序设计语言特点的认识与理解。
同时,可以提高运用C++编程语言解决实际问题的能力;锻炼实际的编程能力、创新能力及团队组织、协作开发软件的能力;还能提高调查研究、查阅技术文献、资料以及编写软件设计文档的能力。
理解的Visual C++ 6.0运行过程,进一步的了解C++是如何面向对象的程序设计,以及在我们平常使用的一些软件的一些功能怎么实现的算法,以及一些基本的菜单如:窗口菜单、编辑菜单、工具菜单、还有文件菜单都是如何实现的。
在这次课程设计中我主要负责的模块是页面的美化和游戏难度、判断游戏结果的函数以及游戏模式等函数。
二、课程设计容与实现的功能1、课程设计容开发一个简单的可以开发人的智力的小游戏。
游戏的界面类一个“井”字,故取名为“井字游戏”。
本游戏界面被分为九个方格,每个方格可以放一个“棋子”,然后游戏开始,双方可以在任何一个格子放自己的棋子。
游戏规则非常简单:双方哪一个先使自己的三个棋子连成一条线(可以是横向的,纵向的,或是斜向的)就算赢,如果双方在九个格子都占满后均没有完成就算平局,点击开始下一局游戏。
2、设计思想井字棋是一个流传已久的传统游戏。
游戏由两个人轮流来下,分别用“X”和“O”来代替自身的棋子。
棋盘分9个格,双方可以在轮到自己下的时候,可以用棋子占领其中一个空的格子。
3、实现的功能(1)简单的开始玩家对战和退出程序的实现。
(5)判断游戏输赢的实现:游戏结束后,系统自动弹出对话框显示游戏结果。
井字棋小游戏课程设计

井字棋小游戏课程设计一、课程目标知识目标:1. 学生能理解井字棋的规则和基本策略,掌握游戏的胜负判断方法。
2. 学生能运用所学知识,设计并实现一个简单的井字棋游戏。
技能目标:1. 学生通过编程实践,提高逻辑思维和问题解决能力。
2. 学生学会使用所学编程语言进行程序设计和调试。
情感态度价值观目标:1. 培养学生对编程的兴趣和热情,增强学习计算机科学的自信心。
2. 培养学生合作学习的意识,提高团队协作能力和沟通能力。
3. 培养学生勇于尝试、克服困难的精神,形成积极向上的学习态度。
课程性质:本课程为信息技术课程,以实践操作为主,结合理论知识,培养学生的编程兴趣和基本技能。
学生特点:五年级学生,对新鲜事物充满好奇心,具备一定的计算机操作基础,但编程经验有限。
教学要求:结合学生特点,注重实践操作,激发学生兴趣,引导学生通过合作探究,培养编程思维和实际操作能力。
将课程目标分解为具体的学习成果,以便后续教学设计和评估。
二、教学内容1. 井字棋游戏规则及策略分析:介绍井字棋的基本规则,引导学生分析游戏策略,理解游戏胜负判断方法。
2. 编程语言基础:回顾所学的编程语言基础知识,如变量、数据类型、条件语句和循环语句等,为后续编程实践打下基础。
3. 井字棋游戏设计:讲解如何使用编程语言设计并实现井字棋游戏,包括游戏界面设计、玩家输入处理、棋盘状态更新等。
4. 游戏测试与优化:教授学生如何测试和调试程序,发现并修复游戏中的问题,提高游戏的稳定性和可玩性。
教学内容安排和进度:第一课时:井字棋游戏规则及策略分析,回顾编程语言基础知识。
第二课时:设计井字棋游戏框架,实现游戏界面和基本功能。
第三课时:完善井字棋游戏功能,测试与优化游戏。
教材章节关联:本教学内容与教材中关于编程实践和应用的相关章节相联系,如《计算机科学》第五章“程序设计基础”、《信息技术》第三章“计算机编程初步”等。
教学内容列举:1. 井字棋规则及策略2. 编程语言基础知识3. 游戏设计原理4. 编程实现井字棋游戏5. 游戏测试与优化方法三、教学方法本课程采用以下教学方法,旨在激发学生的学习兴趣,提高学生的主动性和实践能力:1. 讲授法:教师通过生动的语言和示例,讲解井字棋游戏规则、策略分析以及编程基础知识。
井字棋项目报告

极大极小算法
int Max(vector< vector<int> > QP,int depth) 如果当前状态表明电脑赢棋,则Max函数返回 e(p)= 100*depth; 如果当前状态depth=0,返回此时状态p的评价函数 e(p); 如果棋盘已满,返回此时状态p的评价函数e(p) 否则生成电脑所有可能走棋后的状态,返回所有状 态Min函数返回值的最大值;
人机战(3)
如果棋盘状态p满足MAX胜出,则 e(p)=100*depth depth度量此时状态p位于搜索树的层次, 即: depth =(预设的搜索深度-当前搜索深度) p在搜索树上每下降一层,depth--; 如果棋盘状态p满足MIN胜出,则 e(p)=-100*depth
极大极小算法
No 某方是否赢棋 Yes 电脑下棋子; manTurn = 1;
某方是否赢棋 No Yes 结束
人机对战(2)
采用极大极小的搜索算法 难度由搜索树的深度控制,简单、一般、 困难分别对应于最大搜索深度为1,3,5 若p为棋盘状态,则评价函数: e(p)=(所有空格都放上MAX的棋子后三子 成一线的总数)-(所有空格都放上MIN的 棋子后三子成一线的总数)
保存和载入棋谱
载入棋谱时,将棋步数据存入manual[][3] 中,这样,就可以前后查看棋谱了; 还可以从任意一步棋处开始,继续与电脑 对战;
α β
团队-井字棋游戏-项目总结
团队-井字棋游戏-项⽬总结项⽬名称:井字棋游戏⼩组成员:宋沅修,周天翼,朱中浩,王⾦鑫,张浩项⽬说明:井字游戏的游戏界⾯是⼀个3*3的格⼦,系统提⽰玩家点击棋盘的坐标来表⽰要下的棋⼦的位置,如果玩家输⼊的坐标所在位置已经有棋⼦或者该坐标已经超出了游戏坐标的范围,就提⽰玩家重新输⼊坐标,。
当有三个棋⼦在⼀条直线上的时候就结束游戏,并输出哪个玩家赢了。
使⽤说明:玩家1和玩家2各⾃输⼊⾃⼰的棋⼦坐标,来表⽰棋⼦的位置。
如果某个玩家有三个棋⼦连成⼀条直线,则该玩家胜利,游戏结束。
项⽬不⾜之处:游戏界⾯太单⼀,输出的棋盘太⼩等等。
项⽬代码:# -*- coding: cp936 -*-#1-导⼊库import pygamefrom random import randint#tkMessageBox ⽤来弹出对话框import tkMessageBoxfrom pygame.locals import *#2-初始化游戏pygame.init()width,height=480,480#显⽰样式创建屏幕保存到变量中screen=pygame.display.set_mode((width,height))#标题pygame.display.set_caption("jingziqi")#插⼊图⽚background=pygame.image.load("bjt.png")#定义empty = 0black=(0,0,0)red=(255,0,0)blue=(0,0,255)white=(255,255,255)#创建绘制棋盘的函数def draw_game():#导⼊背景图screen.blit(background,(0,0))#画线#⽤法:pygame.draw.line(显⽰,颜⾊,开始位置,结束位置,宽度)pygame.draw.line(screen, black, (160, 0), (160, 480), 5)pygame.draw.line(screen, black, (320, 0), (320, 480), 5)pygame.draw.line(screen, black, (0, 160), (480, 160), 5)pygame.draw.line(screen, black, (0, 320), (480, 320), 5)#遍历列表中的元素及他们的下标 row横col竖 row col是下标for row, line in enumerate(state):for col, val in enumerate(line):if val == -1:#画xupper_left = (col * 160 + 5, row * 160 + 5)lower_right = (col * 160 + 155, row * 160 + 155)pygame.draw.line(screen, red, upper_left, lower_right, 5)upper_right = (col * 160 + 155, row * 160 + 5)lower_left = (col * 160 + 5, row * 160 + 155) pygame.draw.line(screen, red, upper_right, lower_left, 5) elif val == 1:#创建⼀个矩形.在矩形⾥画圆rect = (col * 160 + 5, row * 160 + 5, 150, 150) pygame.draw.ellipse(screen, blue, rect, 5)else:assert val == emptycontinuepygame.display.flip()def draw_O():#随机函数while True:row = randint(0,2)col = randint(0,2)#当空格为空的时候画圆if state[row][col] == 0:state[row][col] = 1breakdraw_game()pygame.display.flip()def is_won():for val in range(3):# 检查匹配的⾏三个图形是否都相同且不等于空if state[0][val] == state[1][val] == state[2][val] != empty: return state[0][val]# 检查匹配的列三个图形是否都相同不等于空if state[val][0] == state[val][1] == state[val][2] != empty: return state[val][0]#判断 \ 中三个图形是否都相同if state[0][0] == state[1][1] == state[2][2] != empty: return state[1][1]#判断 / 中三个图形是否都相同if state[0][2] == state[1][1] == state[2][0] != empty: return state[1][1]#初始化棋盘def begin():global statestate = [[empty] * 3,[empty] * 3,[empty] * 3]draw_game()#⾸先初始化 pygame.display.flip()begin()#主循环while True:event=pygame.event.wait()#初始化pos = Nonetemp = 0#接收到退出事件后退出程序if event.type == pygame.QUIT:pygame.quit()exit(0)#加⼊了按键功能elif event.type == KEYDOWN:if event.key == K_a:begin()draw_game()pygame.display.flip()elif event.key == K_s:pygame.event.post(pygame.event.Event(QUIT))#接受⿏标点击事件elif event.type == MOUSEBUTTONDOWN and event.button == 1: #event.pos[0]代表x轴坐标 event.pos[1]代表y轴坐标pos = (event.pos[1]/160, event.pos[0]/160)row,col=pos#if pygame.mouse.get_rel()==(0,0):# continue#加⼀个条件让它只能在空的时候画xif state[row][col]==0:state[row][col] = -1else:continueprint posdraw_game()draw_O()#判断属性接受返回值if is_won() == -1:tkMessageBox.showinfo(title='win',message='win')pygame.quit()exit(0)elif is_won() == 1:tkMessageBox.showinfo(title='lose',message='lose') pygame.quit()exit(0)项⽬图⽰:项⽬总结:通过这次团队合作编写井字棋项⽬,我们⼩组通过运⽤所学的知识成功编写出了井字棋项⽬,并且成功运⾏,让我们编写程序的能⼒得到了提升。
井子棋实验报告
一、实验目的本次实验旨在通过编写Java程序实现井子棋游戏,提高编程能力和算法设计能力,同时加深对面向对象编程思想的理解。
二、实验内容1. 版本1:实现井子棋游戏的基本功能(1)在3x3的棋盘上,两个玩家轮流输入X和O,将标记放置在棋盘上。
(2)程序在控制台显示棋盘状态,并判断游戏状态(赢家、平局、继续)。
(3)实验要求:完成版本1,得分20分。
2. 版本2:使用自定义面板实现井子棋游戏界面(1)创建一个自定义面板Cell类,用于显示X、O或者不显示。
(2)使用Math.random()方法产生整数0、1或者2,对应于显示X、O或者不显示。
(3)创建一个包含9个自定义面板的框架,实现井字游戏界面。
(4)实验要求:完成版本2,得分10分。
3. 版本3:实现可交互的井子棋游戏(1)修改版本2中的Cell类,初始时所有格子为空;第一个玩家使用X标记,第二个玩家使用O标记。
(2)当一个用户在格子上点击鼠标时,如果该格子为空,则使用X或O填充;如果格子已经填充,则忽略用户操作。
(3)主程序面板TicTacToe类包括9个Cell对象,可以创建对象数组Cell[3][3]存储;一个Button用于重新开始;一个标签用于描述当前进行。
(4)实验要求:完成版本3,得分20分。
三、实验过程1. 版本1实现(1)创建一个名为TicTacToe的类,包含棋盘、玩家、游戏状态等属性。
(2)定义一个方法用于打印棋盘状态。
(3)定义一个方法用于判断游戏状态。
(4)定义一个方法用于玩家输入。
(5)在主函数中,循环调用以上方法,实现游戏逻辑。
2. 版本2实现(1)创建一个名为Cell的类,继承自JPanel类。
(2)在Cell类中,重写paintComponent方法,用于绘制X、O或者空白。
(3)在TicTacToe类中,创建9个Cell对象,并将它们添加到JFrame中。
(4)在TicTacToe类中,定义一个方法用于初始化棋盘。
数据结构课程设计报告(井字棋)(大全)
数据结构课程设计报告(井字棋)(大全)第一篇:数据结构课程设计报告(井字棋)(大全)目录一、设计课题名 (1)二、设计目的 (1)三、问题描述及需求分析 (1)四、概要设计………………………………………………五、详细设计………………………………………………六、测试数据及测试结果…………………………………七、课程设计小结…………………………………………八、用户手册……………………………………………… 1 5 7 8一、设计课题名井字棋(人机对弈)二、设计目的1、课程设计是《数据结构》课程教学必不可缺的一个重要环节;2、通过课程设计加深课堂教学内容的理解和巩固;3、将《数据结构》课程的教学内容与解决实际问题结合起来,培养理论联系实际的学风;4、提高程序设计能力、培养自学能力;5、提高分析问题、解决问题的能力;6、提高收集资料、查找参考书的能力;7、锻炼书写报告的能力。
三、问题描述及需求分析本设计的主要完成的是井字棋的人机对弈问题,即计算机与人交替落子,当行、列或对角有连续三个相同一方棋时,则判定一方胜利,若无此情形则为和局。
要完成此设计则需一判定胜负函数及一计算机自行落子函数,一旦这两个函数完成则此程序主要部分可完成。
四、概要设计完成此程序需一合理数据结构,因其为井字棋游戏程序则此结构中应包含一存储当前棋局的数组;又因计算机在判定在何位置落子最佳时,需一搜索树因而我在设计时设置了一PARENT域和CHILD域;除了主程序外,它还包括具有以下功能的函数:(1)棋盘初始化函数:void Init();(2)打印棋盘函数:void PrintQP();(3)用户输入落子位置函数:void UserInput();(4)判断当前棋局是否有一方获胜,并判断哪一方获胜的函数:int IsWin(State s);(5)评估函数值计算函数:int e_fun(State s);(6)极大极小值算法主函数:int AutoDone()。
井字棋实验报告
井字棋实验报告篇一:井字棋实验报告课程:班别小组成员人工智能原理及其应用12商本学号及姓名指导老师实验02井字棋1、总体要求:1.1总体功能要求:利用不同的方法,实现人机对战过程中呈现出不同程度的智能特征:(1)利用极大极小算法、α-β剪枝来提高算法的效率。
(2)使用高级语言,编写一个智能井字棋游戏。
(3)结合极大极小算法的使用方法和α-β剪枝,让机器与人对弈时不但有智能的特征,而且计算的效率也比较高。
1.2.开发平台要求:开发者开发的软件必须能够在不同系统的电脑上正常运行,因此开发平台为:开发环境:JDK1.6开发工具和技术体系:为了此游戏能够很好的在不同系统中运行,因选择javaee进行开发,利用eclipse1.3项目管理要求:(1)项目程序编写过程中要适当的写一些注释,以便下次作业时能够快速的上手和以后的修改:(2)项目程序要保存在一个固定的工作区间;(3)确保代码不要太多冗余2、需求分析:2.1软件的用户需求:井字棋游戏的用户希望游戏除了有一般的功能之外,还可以通过极大极小算法、α-β剪枝等方法是的井字棋游戏能够拥有智能特征,并是的电脑在人机对弈的过程中因玩家的难度选择而体现不同程度的智能状况。
2.2软件的功能需求:本游戏需要实现功能有:(1)游戏的重新设置(2)游戏统计(如:人赢的次数、电脑赢的次数等)(3)游戏的退出(4)不同智能程度下(脑残、懵懂、正常、智能),人机对弈(5)既可以选择难度,也可以选择谁走第一步(人or电脑) 2.3软件的性能需求:井字棋游戏需要以图形界面的形式表现出来,通过点击图标就可以进入游戏;在游戏进行时,人机对弈时电脑能够快速的反应并根据人的上一步动作作出,通过选择“脑残、懵懂、正常、智能”难度选择,电脑以不同程度的智能与人进行游戏对弈。
2.4 运行环境:能够运行java程序的环境(装有jdk 或者jre)2.5 用户界面设计:用gridlayout进行用户界面的设计把界面中分为不同的模块。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Xx学院
计算机信息学院《C语言课程设计(短一)》
指
导
书
年
附件二封面格式
学院
C语言课程设计总结报告
题目井字棋
指导教师
院系计算机与信息工程学院
专业计算机科学与技术
班级
学号
姓名
成绩
xx年xx月xx日
附件三目录格式
目录
第一章系统功能说明 (1)
第二章使用说明 (2)
2.1 安装手册 (3)
2.2 使用手册 (4)
第三章程序结构 (5)
3.1 程序结构说明 (6)
3.2 重要数据说明 (7)
3.3 函数清单 (8)
第四章系统设计难点及其解决方法 (9)
第五章不足之处 (10)
第一章系统功能说明
井字游戏的游戏界面是一个3*3的格子,系统提示玩家输入棋子的坐标来表示要下的棋子的位置,如果玩家输入的坐标所在位置已经有棋子或者该坐标已经超出了游戏坐标的范围,就提示玩家重新输入坐标,。
当有三个棋子在一条直线上的时候就结束游戏,并输出哪个玩家赢了。