高级程序设计--五子棋_第1页
高级程序设计--五子棋_第2页
高级程序设计--五子棋_第3页
高级程序设计--五子棋_第4页
高级程序设计--五子棋_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 高级程序设计 设计报告题目: 五子棋小游戏 院系:专业: 组长: 学号: 组员1: 学号: 组员2: 学号: 组员3: 学号: 组员4: 学号: 指导教师: 康元元 高级程序设计 设计报告一、选题目的和意义:社会的飞速进步要求我们的下一代必须掌握三种语言:即母语,外语,计算机语言。  学会与计算机打交道是现代各行各业必备的基本技能。而青少年时代是学习计算机的最好时机,他们记忆力强,反应快。青少年时代学习的知识记是最较牢固的。 实践证明:从小学习计算机程序设计知识与方法可以在智力上特别是科学创新能力与逻辑思维能力有明显的提高。1. 程序设计的目标是用某种计算机高级算法语言编

2、写程序实现特定的算法的功能。这一工作要具有强烈的创造意识,为实现预想的功能要不断地设想多种方案;同时又需要具有十分严谨的逻辑推理,才能成功地编写出高效、出色的程序。因此程序设计是获得创造性修养与获得正确思维方法的极好的科目。是进行智力开发,培养良好学习方法的学科,特别是为理科的学习打下了一个良好的基础2. 由于计算机程序设计与数学是紧密相互联系而相辅相成的。它对数学的学习有着极大的促进作用。许多数学问题必须要用计算机才能最终解决问题,反之计算机的编程常常要借助数学的思想与方法才能出色完成任务。计算机的出现也打破了利用数学解决问题的常规,降低了数学方法的难度,提高了精度与速度。事实上现在的数学正

3、在逐步地与计算机连成一体(学生的数学素养包含了计算机的编程能力)。3. 程序设计是学习其他学科的基础,不论是文科还是理科,特别是学习理科学科,计算机是一种必不可少的工具,有许多物理、化学、生物上的问题都要求助于计算机才能获得确切的解答,实际上机器人,动画制作等技术也要用到程序设计方法。4. 程序设计是青少年参加数学建模活动的重要工具,数学建模是一种利用数学方法与计算机程序设计解决各种问题(包括数、理、化、社会、人文、经济等问题)的科学活动。目前正在世界各国推广开展这一活动。这是一种培养青少年面向社会科学实践的创造性活动。学生姓名任务分工学生姓名任务分工学生姓名任务分工编程序调试找选题查资料写报

4、告二、主要研究内容: 随着IT技术的发展,很多日常生活中的游戏都被搬到了计算机里供大家娱乐,尤其是博弈类的棋类游戏,如中国的象棋,围棋,五子棋等,今年来人们对人工智能技术的研究成果使得斯算计在这些博弈游戏中能战胜很多玩家。其次,五子棋作为一个棋类竞技运动,在民间十分流行,为了熟悉五子棋规则及技巧,以及研究简单的人工智能,决定用Java开发五子棋游戏。主要完成人机对战的功能。在人机对弈中通过深度搜索和估值模块来提高电脑旗手的智能。分析估值模块中的影响精准性的几个要素,以及提出一些提高精准性的办法,以及对它们搜索的节点数进行比较,在这些算法的基础山分析一些提高电脑AI方案,如递归算法、电

5、脑学习等。算法的研究有助于理解程序结构,增强逻辑思维能力,在其他人工智能方面也有很大的参考作用。近来随着计算机的快速发展,各种各样的电脑游戏层出不穷,使得我们能有更多的娱乐项目,而棋类游戏能起到锻炼人的思维和修身养性的作用,而且棋类游戏水平颇高,大有与人脑分庭抗礼之势。  本文结合五子棋这个游戏的特点,将阐述单机版五子棋算法设计,突出人工智能在博弈方面的应用,旨在试验人工智能里的一些搜索算法,最终确定人工智能在未来各学科里的重要应用性,人工智能是一门正在速度发展的新兴的综合性很强的边缘科学,它的中心任务是如何使计算机去做那些过去只能靠人的智力才能做的工作,而选五子棋游戏的开

6、发则是利用计算机来实现它的人工智能,从而培养我们从事软件开发方面的能力. 三、设计的方法及步骤:方法:  (1)在一个15*15的棋盘上,进行五子棋的对战,不同的是这一次要求由程序代替你战斗。 (2)根据系统提供的对战信息,通过计算给出合理的下一步落子的位置。   (3)输入、输出数据格式  输入格式的第一行为一个整数N,表示当前已下的子数,此后N行,每行一个落子的位置(第一个落子为黑子、第二个落子为白子、依次类推),位置由x,y表示(分别为落子的行坐标、列坐标,取值范围为014)  输出格式为一坐标x,

7、y,表示经过计算得出的下一落子位置。(注意,不必标明落黑子还是白子,因为落黑子还是白子从当前已下的子数即可判断) 例如(输入数据)4)设计时的注意事项 落子必须在棋盘有效范围内,已经落子的位置不能落子。 程序对先手黑棋或后手白棋均能计算正确的落子。 步骤:1、查找有关电话薄管理系统的相关资料;2、学习电话薄管理系统的相关资料,复习C语言;3、开始进行编程;4、上机进行调试;5、进行多次调试,处理出现的各种问题,整理实验的步骤、数据、内容、写实验报告。6、整体过程中,用到了printheader(),printdata(),等函数从而设计完成了这个五子棋系统。四、实验设计:/*/#in

8、clude<iostream>#include<cstdlib> using namespace std;const char outstr114="","","","","","","","","","",""int com1515,luozi1515;int c,d;void jushi() /这是判断落子重要性的函数 int x,y,i,m,n,l

9、ianzi1=0,lianzi2=0,life=0; memset(com,0,sizeof(com); for(x=0;x<=14;x+) for(y=0;y<=14;y+) if(luozixy=0) for(m=-1;m<=1;m+) for(n=-1;n<=1;n+) if(m!=0 | n!=0) for(i=1;i<=4;i+) if( x+i*m>=0 && x+i*m<=14 && y+i*n>=0 && y+i*n<=14 && luozix+i*my+i*n

10、=1 ) lianzi1+; else if(luozix+i*my+i*n=0) life+; break; else break; for(i=-1;i>=-4;i-) if( x+i*m>=0 && x+i*m<=14 && y+i*n>=0 && y+i*n<=14 && luozix+i*my+i*n=1 ) lianzi1+; else if(luozix+i*my+i*n=0) life+; break; else break; if(lianzi1=1) comxy+=1; else

11、if(lianzi1=2) if(life=1) comxy+=5; else if(life=2) comxy+=10; else if(lianzi1=3) if(life=1) comxy+=20; else if(life=2) comxy+=100; else if(lianzi1=4) comxy+=500; life=0; for(i=1;i<=4;i+) if( x+i*m>=0 && x+i*m<=14 && y+i*n>=0 && y+i*n<=14 && luozix+i*my+

12、i*n=2 ) lianzi2+; else if(luozix+i*my+i*n=0) life+; break; else break; for(i=-1;i>=-4;i-) if( x+i*m>=0 && x+i*m<=14 && y+i*n>=0 && y+i*n<=14 && luozix+i*my+i*n=2 ) lianzi2+; else if(luozix+i*my+i*n=0) life+; break; else break; if(lianzi2=1) comxy+=2; el

13、se if(lianzi2=2) if(life=1) comxy+=8; else if(life=2) comxy+=30; else if(lianzi2=3) if(life=1) comxy+=50; else if(life=2) comxy+=200; else if(lianzi2=4) comxy+=1000; lianzi1=0; lianzi2=0; life=0; void computer(int a1515) /这是电脑落子的函数 int i,j,max=0; jushi(); for(i=0;i<=14;i+) for(j=0;j<=14;j+) if

14、(comij>max) max=comij; c=i; d=j; acd=10; luozicd=2;int panduan(int x,int y,int sum) /判断胜负的函数 int m,n,i,lianzi=0; for(m=-1;m<=1;m+) for(n=-1;n<=1;n+) if(m!=0 | n!=0) for(i=1;i<=4;i+) if( x+i*m>=0 && x+i*m<=14 && y+i*n>=0 && y+i*n<=14 && luozix+i

15、*my+i*n=sum ) lianzi+; else break; for(i=-1;i>=-4;i-) if( x+i*m>=0 && x+i*m<=14 && y+i*n>=0 && y+i*n<=14 && luozix+i*my+i*n=sum ) lianzi+; else break; if(lianzi>=4) return 1; else lianzi=0; return 0; int main() /主函数 ,主要进行人落子工作 system ("color 2f&

16、quot;); system ("mode con cols=50 lines=25"); system ("title 五子棋!"); int a1515=0,1,1,1,1,1,1,1,1,1,1,1,1,1,2, 3,4,4,4,4,4,4,4,4,4,4,4,4,4,5, 3,4,4,4,4,4,4,4,4,4,4,4,4,4,5, 3,4,4,4,4,4,4,4,4,4,4,4,4,4,5, 3,4,4,4,4,4,4,4,4,4,4,4,4,4,5, 3,4,4,4,4,4,4,4,4,4,4,4,4,4,5, 3,4,4,4,4,4,4,4

17、,4,4,4,4,4,4,5, 3,4,4,4,4,4,4,4,4,4,4,4,4,4,5, 3,4,4,4,4,4,4,4,4,4,4,4,4,4,5, 3,4,4,4,4,4,4,4,4,4,4,4,4,4,5, 3,4,4,4,4,4,4,4,4,4,4,4,4,4,5, 3,4,4,4,4,4,4,4,4,4,4,4,4,4,5, 3,4,4,4,4,4,4,4,4,4,4,4,4,4,5, 3,4,4,4,4,4,4,4,4,4,4,4,4,4,5, 6,7,7,7,7,7,7,7,7,7,7,7,7,7,8; int x,y,i,j; memset(luozi,0,sizeof(l

18、uozi); cout<<" 0 1 2 3 4 5 6 7 8 9 10 1 2 3 4"<<endl; for(i=0;i<=14;i+) if(i!=0) cout<<endl; cout<<i%10; for(j=0;j<=14;j+) cout<<outstraij; cout<<endl; cout<<"更多程序登陆 或联系QQ:742332134n" cout<<"请输入您要下的棋子 行列 用空格隔开:" whil

19、e(cin>>x>>y) if(luozixy=0 && x>=0 && x<=14 && y>=0 && y<=14) axy=9; luozixy=1; if(panduan(x,y,1)=0) system ("cls"); computer(a); if(panduan(c,d,2)=0) cout<<" 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4"<<endl; for(i=0;i<=14

20、;i+) if(i!=0) cout<<endl; cout<<i%10; for(j=0;j<=14;j+) cout<<outstraij; cout<<endl; cout<<"您的棋子落在"<<x<<"行"<<" "<<y<<"列"<<endl; cout<<"电脑的棋子落在"<<c<<"行"&l

21、t;<" "<<d<<"列"<<endl; cout<<"请输入您要下的棋子" else cout<<" 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4"<<endl; for(i=0;i<=14;i+) if(i!=0) cout<<endl; cout<<i%10; for(j=0;j<=14;j+) cout<<outstraij; cout<<endl; co

22、ut<<"电脑的棋子落在"<<c<<"行"<<" "<<d<<"列"<<endl; cout<<"电脑获胜!"<<endl; break; else system ("cls"); /清屏 cout<<" 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4"<<endl; for(i=0;i<=14;i+) if

23、(i!=0) cout<<endl; cout<<i%10; for(j=0;j<=14;j+) cout<<outstraij; cout<<endl; cout<<"您获胜啦!"<<endl; break; else cout<<"输入错误,请重新输入:"<<endl; system ("title 游戏结束,谢谢使用!"); system ("color 03"); cout<<"游戏结束,谢谢使用"<<endl; system("pause

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论