logo资料库

C语言五子棋实验报告.docx

第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
资料共10页,剩余部分请下载后查看
基于 EGE 图形库 五子棋游戏 实验报告 2018 届电信卓越班 U201811462 王悦天
目录 1 课程设计............................................................................................................................................... 3 1.1 课程设计的背景........................................................................................................................... 3 1.2 课程设计的目的........................................................................................................................... 3 1.3 课程设计的要求........................................................................................................................... 3 1.4 课程设计的开发环境................................................................................................................... 4 2 功能描述..............................................................................................................................................4 2.1 初始界面........................................................................................................................................ 4 2.2 人机对战....................................................................................................................................... 4 2.3 玩家对战........................................................................................................................................5 3 程序实现...............................................................................................................................................5 3.1 界面设计.........................................................................................................................................5 3.2 人机博弈........................................................................................................................................9 4 软件展望.............................................................................................................................................10 5 收获心得............................................................................................................................................. 10 2
1 课程设计 1.1 课程设计的背景 五子棋相传起源于四千多年前的尧帝时期,比围棋的历史还要悠久,可能早 在“尧造围棋”之前,民间就已有五子棋游戏。有关早期五子棋的文史资料与围棋 有相似之处,因为古代五子棋的棋具与围棋是完全相同的。在上古的神话传说中有 “女娲造人,伏羲做棋”一说,《增山海经》中记载:“休舆之山有石焉,名曰帝 台之棋,五色而文状鹑卵。”李善注引三国魏邯郸淳《艺经》中曰:“棋局,纵横 各十七道,合二百八十九道,白黑棋子,各一百五十枚”。这段虽没明讲是何种棋 类,但至少知道远古就以漂亮的石头为棋子。因而规则简单的五子棋也可能出自当 时,并是用石子作棋子。亦有传说,五子棋最初流行于少数民族地区,以后渐渐演 变成围棋并在炎黄子孙后代中遍及开来。在古代,五子棋棋具虽然与围棋相类同, 但是下法却是完全不同的。正如《辞海》中所言,五子棋是“棋类游戏,棋具与围 棋相同,两人对局,轮流下子,先将五子连成一行者为胜”。 传统五子棋棋子分为黑白两色,棋盘为 15×15,棋子放置于棋盘线交叉点上。 因为传统五子棋只能实现人人对战,而用计算机编程能够实现人机对战,一个人 的时候也能体验五子棋的乐趣。因此我们设计了一款兼具人机对战与玩家对战功能 的五子棋游戏。 1.2 课程设计的目的 1. 加深对 C 语言数据类型,运算,语句结构及其程序设计的基本方法理解和掌 握; 2. 初步学习和使用图形库; 3. 通过编写一个完整的程序,一方面可以检查我们这学期的学习情况,为以后 的学习打下坚实的基础; 4. 初步了解 C 语言游戏编程,在此次程序设计过程中掌握五子棋游戏开发的基本 原理,从而为以后的程序开发奠定基础 1.3 课程设计的要求 1. 编写程序代码,调试所写程序使其能够正确运行; 2.能进行基本的五子棋操作,有图形界面,能够用鼠标操作; 3
3. 能够实现玩家对战与人机对战。 1.4 课程设计的开发环境 Win10 操作系统下的软件开发工具 Code:Blocks 与 Visual Studio 2017 ,使 用 EGE 图形库进行开发。 2 功能描述 2.1 初始界面 1. 设计了缤纷绚丽的初始界面,充分的吸引的玩家的眼球,激发玩家的游玩 欲望; 2. 运行程序经过“EGE”启动动画后进入首页,玩家在菜单栏中通过鼠标选择 进入“人机对抗”与“玩家对战”游戏模式; 3. 选择一个模式后切换至相应游戏界面,根据提示信息开始游戏; 4. 色彩分明的菜单栏与大小适中的选项框的设计,再结合鼠标操控,玩家使 用起来方便快捷; 5. 在右下角表明了班级与姓名,方便程序的交流。 2.2 人机对战 1. 应用来源于网络上“关于五子棋的人机博弈算法”中最出名同时也是应用 最广泛的“flat 技术”“打分机制”“棋型判断和禁手判断”和“AI 算 法”,根据设计者说明的引导,将算法移植了进来,使得电脑方具有相当 的智慧; 2. 游戏界面的棋盘旁边设计有“棋子计数板”,方便玩家结合以考虑棋盘上 的形势; 3. 游戏界面使用木色为背景,让玩家操作起来更具真实感; 4. 当有一方胜出后,会在游戏界面底部分别显示“恭喜您取得了胜利!”与 “您输了!请再接再厉!”来提醒玩家游戏结束; 5. 当游戏结束后,玩家可以点击“返回首页”以返回主菜单来继续下面的游 戏。 4
2.3 玩家对战 1. 进入游戏界面后显示提示信息“您已进入玩家对战 白方先手 请落子以开始 游戏”; 2. 使用鼠标轮流落点,操作简单方便; 3. 左上角显示“模式:玩家对面”,提醒玩家当前模式信息; 4. 和 人机对抗 一样具有“计数板”、“游戏输赢提醒”和“返回首页”等功 能,在此不再赘述。 3 程序实现 3.1 界面设计 1.首页界面 界面包括几个窗体,第一个窗体是首页,首页使用 EGE 的图形绘制功能绘 制了一系列填充了不同鲜艳颜色的长方形,包括游戏标题栏,模式菜单栏,游 戏模式选择框以及备注框;使用 EGE 中的文字打印功能显示出游戏标题,模式 选项,装饰语言以及作者信息;并结合 EGE 中获取鼠标点击的坐标信息的函数 设计了模式选择函数,是用户可以通过点击界面上的选项区域来进入与之相应 的游戏模式,操作简单方便。 此部分主要通过 void ShouYe()函数与 void moshixuanze()函数实现, 下面是这两个函数的代码与相应注释。 void ShouYe()//首页界面 { whitewin=0; blackwin=0; memset(placeblack,0,sizeof(placeblack)); memset(placewhite,0,sizeof(placewhite)); xuanze1=0; xuanze2=0; initgraph(800,600);//初始化画幅 setbkcolor(EGERGB(0xEE, 0x82, 0xEE));//设置背景颜色 5
setfillcolor(EGERGB(0xAD, 0xFF, 0x2F));//标题栏 bar(0, 0, 800,150); setcolor(EGERGB(255, 69, 0));//文字颜色 setbkmode(TRANSPARENT);//文字填充透明化 setfont(100, 43, "华文琥珀");//(字体高度,字体宽度(为 0 即为自适应),字形),幼圆 outtextxy(15, 20, "寒假作业:五子棋");//在坐标为 (10,20) 显示“寒假作业:五子 字体 棋” //设置装饰文字 setbkmode(TRANSPARENT); setcolor(EGERGB(0, 255, 255));//蓝 setfont(100, 0, "华文行楷"); rectprintf(50,200,150,500,"休\n\n 闲"); setbkmode(TRANSPARENT); setcolor(EGERGB(0, 255, 0));//绿 setfont(100, 0, "华文行楷"); rectprintf(650,200,750,500,"益\n\n 智"); //设置菜单栏 setfillcolor(EGERGB(0x80, 0x80, 0x80)); bar(200,150,600,600); setbkmode(TRANSPARENT); setcolor(EGERGB(0xFF, 0xFF, 0x00));//金色 setfont(35, 0, "隶书"); outtextxy(225,155,"请点击以选择游戏模式"); //第一个选择框 setfillcolor(EGERGB(139, 0, 139)); bar(250, 250, 550,350); setbkmode(TRANSPARENT); setcolor(EGERGB(255, 255, 0)); setfont(70, 0, "华文行楷"); rectprintf(260, 260, 550,350,"人机对抗"); //第二个选择框 setfillcolor(EGERGB(255, 0, 0)); bar(250, 400, 550,500); setbkmode(TRANSPARENT); setcolor(EGERGB(0, 191, 255)); setfont(70, 0, "华文行楷"); 6
rectprintf(260, 410, 550,500,"玩家对战"); //备注栏 setfillcolor(EGERGB(235, 206, 250)); bar(300, 550, 800,600); setcolor(EGERGB(0, 0, 0)); setbkmode(TRANSPARENT); setfont(40, 0, "方正舒体"); rectprintf(300,550,800,600,"2018 届电信卓越班 王悦天"); } void moshixuanze()//鼠标选择菜单 { //用鼠标选择 for ( ; is_run(); delay_fps(60)) { while (mousemsg()) { msg = getmouse(); } if(msg.is_left()&&msg.x>=250&&msg.x<=550&&msg.y<=350&&msg.y>=250) { cleardevice(); xuanze1=1; break; } if(msg.is_left()&&msg.x>=250&&msg.x<=550&&msg.y>=400&&msg.y<=500) { cleardevice(); xuanze1=2; break; } } if(xuanze1==1) { PVC(); } else if(xuanze1==2) { PVP(); 7
} } 2. 棋盘绘制 使用 EGE 中的图形绘制函数,结合 C++里的 for 循环函数,用直线绘制 棋盘。直线是由端点绘制的,每个点都有坐标,通过循环改变每次的端点坐标, 从而绘制出 15*15 的棋盘,代码如下 setbkcolor(EGERGB(222, 184, 135));//设置背景颜色 setcolor(BLACK); for(int i=60;i<510;i+=30) { line(i,60,i,480); } for(int j=60;j<510;j+=30) { line(60,j,480,j); } 3. 棋子生成 通过对鼠标点击坐标的处理运算,在棋盘的落点上通过图形绘制画出相应的黑色或白 色的圆形来实现棋子的生成。下面是在游戏界面函数中的棋子生成部分。 for(int i=60;i<=480;i++)//绘制棋子 { for(int j=60;j<=480;j++) { if(placewhite[i][j]) { setcolor(EGERGB(255, 255, 255)); setfillcolor(EGERGB(255,255,255)); fillellipse(i,j,15,15); } if(placeblack[i][j]) { setcolor(EGERGB(0, 0, 0)); setfillcolor(EGERGB(0,0,0)); fillellipse(i,j,15,15); } } 8
分享到:
收藏