C语言课程设计(论文)-跳棋.doc_第1页
C语言课程设计(论文)-跳棋.doc_第2页
C语言课程设计(论文)-跳棋.doc_第3页
C语言课程设计(论文)-跳棋.doc_第4页
C语言课程设计(论文)-跳棋.doc_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

1 学年论文学年论文 (课程论文、课程设计)(课程论文、课程设计) 题题 目:目: 跳跳 棋棋 作作 者:者: 所在系别:所在系别: 计计 算算 机机 学学 院院 专业年级:专业年级: 2007 级计算机与科学技术级计算机与科学技术 指导教师:指导教师: 职职 称:称: 讲讲 师师 2008 年年 12 月月 31 日日 2 重庆文理学院重庆文理学院 课程论文(设计)课程论文(设计) 、学年论文评分表、学年论文评分表 系别: 计算机学院 论文(设计)性质: 题 目 跳棋 作 者 专业年级 07 计算机 科学与技 术 指导教师 指导 教师 评语 及 评分 建议 指导教师: 年 月 日 院 (系) 或 教 研 室 意 见 院(系)或教研室主任: 年 月 日 3 目录目录 一一 概述概述.6 1.11.1 引言引言.6 1.21.2 游戏的介绍游戏的介绍6 1.31.3 流程图流程图.7 二二 跳棋的程序设计与功能实现跳棋的程序设计与功能实现8 2.12.1 设计思路设计思路.8 2.1.1 简介.8 2.1.2 基本规则.8 2.1.3 操作.8 2.1.4 跳棋小技巧.9 2.22.2 程序的模块分析程序的模块分析.9 2.2.1 主功能函数.9 2.2.2 棋子走动的函数10 2.2.3 一子跳的合法性检查的相关函数的分析10 2.2.4 判断是否胜利的相关程序的分析(以两人战为例)10 三三 程序的不足及其优化程序的不足及其优化.11 3.13.1 程序的不足程序的不足11 3.23.2 程序的优化程序的优化.11 体体 会会12 参考文献参考文献13 附附 录录14 4 摘要摘要:论文运用数据结构的相关知识,用 c 语言编写的一个跳棋的小游戏。首先要先定义一 个二维数组来记录屏幕上的各个点的状态,用不同功能的函数来实现对棋子的操作,让棋子一步一 步的到达目的地。最后赢得胜利。跳棋由于是一款小游戏,棋盘设计与一般的棋盘不同,采用一个 正方形来表示棋盘,正方形的四个角存放初始的棋子。游戏可两个、三个,或四个人同时进行。最 先到达对面的则赢得胜利。其中,数字(2-4)是选择人数游戏则同时自动开始,a 表示左下方移 动,w 表示左上方移动,d 表示右上方移动,s 表示在下方移动,空格表示确定,b 表示返回,0 则 退出。游戏中设计了精美的屏幕,在赢得游戏时会有烟花爆炸,同时出现玩家的名次。游戏中有各 种提示以供参考,让玩家真正感受到游戏的快乐。游戏在 dos 的状态下运行良好,能够实现上述功 能。 关键词关键词:人工智能、应用、程序设计 5 abstract:this paper is the use of the data structure of knowledge, and use the c language in a checkers game. first of all, first the definition of a two-dimensional array on the screen to record all the points, with different functions in the function to achieve piece of the operation, so that the piece step by step to reach their destinations. to win the final victory. as the game is a small, the board is our own design, and the general board, we designed a square to indicate the board to allow the four corners of a square piece of the initial release. games can be two, three or four people at the same time. the first to reach the opposite is victory. among them, the numbers (2-4) is to choose the number of games while at the same time start automatically, a said that the lower left mobile, w said that the upper left mobile, d, said at the top right of the mobile, s said that in the bottom of the mobile, spaces that determine, b said that the anti-back , 0 quit. at the same time we also designed a beautiful screen, winning the game there will be fireworks exploded at the same time is now their position, and play a variety of tips for reference. allows gamers to really feel the joy of the game. the game can only be run under dos state. key words: artificial intelligence, application, programm 6 一 概述 1.11.1 引言引言 跳棋”是一款经典的益智小游戏,也是许多小朋友十分喜欢的小小游戏,很多的 家长为了锻炼开发小孩的智力,买同类型的模具、游戏碟,现在可以在手机上玩,会 让用户感到更加方便,让家长放心,想什么时候玩就什么时候玩,它规则简单,操作 容易,让小孩在游戏的同时也对世界充满好奇。 1.21.2 游戏的介绍游戏的介绍 跳棋游戏要求通过将棋盘上一方的棋子在各种规则的限制下,经过玩家一步一步 的计算和移动,全部一模一样的移动到对方的位置,先完成的则赢得游戏。跳棋有各 种各样的板本,一般也有不同的规则。就是根据这此来设计的一款更为简单和更适合 玩家的游戏。游戏可同时(2-4)个人玩,只要选定几个人后,棋子会自动摆放,玩家 只须要按动a,s,d,w四个方向键,就可以把棋子移动到想要走的位置上去,如果选 择棋子错误则可用空格重新选择。本游戏在dos模式下运行,但也不失游戏的快乐,在 游戏的同时会有彩灯在屏幕上闪烁和各种精美的画面,让玩家真正感受到乐在其中。 赢得游戏后欢送界面,并提醒玩家是否还想再来一盘。 7 1.31.3 流程图流程图 ch=0 ch=getch() ch=else 介面初始化 开始 ch=getch() ch=n|n 规则介面 ch=else ch=0退出游戏 ch=getch()ch=b|bch=else ch=n|n ch=b|b ch=2ch=3ch=4 二人战 三人战四人战 ch=else ch=0 继续游戏ch=b|bch=getch() 8 图 1 隔一子可跳 图 2 初始化介面 二 跳棋的程序设计与功能实现 2.12.1 设计思路设计思路 2.1.12.1.1 简介简介 跳棋来自 1892 年的德国,由四角跳棋( halma , 1883 )改良而成,流传到新 大陆时为增添神秘东方色彩,被命名为“中国跳棋”跳棋规则简单易懂,一玩就 会,实在是带着平和心情、进行美好回忆的益智棋戏。 2.1.22.1.2 基本规则基本规则 游戏人数: 2 , 3 , 4 人 玩家营区:起初玩家 6 颗棋子的放置位置, 是一个直角三角形 玩家目标:玩家的 6 颗棋子要离乡别井,连 走带跳奔向对家,完全占领正对面的营区 入营:棋子进入目标营区 走子:只能一步走棋子可四个方向走动,每 步 只能达到相邻的空位 跳子:可以连续跳 一子跳棋规则:隔一个棋子可以跳(如:图 1) 2.1.32.1.3 操作操作 1.进入初始化介面,选择 2、3、4 可以分别进入 2 人、3 人、4 人作战介面 2.当游戏没有始时,四个指示灯为黄色,每轮游戏从第一个玩家开始走,相应的指示 灯就会变成相应的颜色,谁的指示灯变了颜色,谁就可以走动棋子 3.w、a、s、d 为方向键,选中自己棋子,点击空格,即可选定你要走的棋子 4.如果中途想更换棋子,重复操作 2 即可 5.选中你要放的空位,点击空格,如果符合规 则,则会将你选中的棋子移动到你选中 的空位中 6.如果选中的棋子和空位不符合规则,则重复 上述操作即可 7.选择b或b可以返回初始化介面 (如:图 2);选择0可以退出整个游戏 9 图3 二人对战 图 4 三人对战 图 5 四人对战 图 6 游戏结束介 面 2.1.42.1.4 跳棋小技巧跳棋小技巧 1.开局可以学习一些定式,快速出子,先手 尤其要制定自己的战术,贯彻下去以保持 先机。 2.中盘注重攻守平衡,整体推进,最忌为对手以少量兵力占据要津,甚至分割棋势。 先手注意快攻压制,后手注意防稳觅机。 3.收宫决战,注意不要因急于入营,而忘记为后续棋子搭桥助跳。 2.22.2 程序的模块分析程序的模块分析 该程序是由两个结构和若干个函数组成的,下面对其中的一些结构和函数做一下分 析或解释。 2.2.12.2.1 主功能函数主功能函数 主功能函数包括了整个游戏程序的所有功 能函数,首先调用了一个欢迎介面,然后用一 个while循环重复调用游戏相关函数, 直到按0退出,退出后又有一个结束介面,按两 次任意键退出。 在while循环里面,首先对游戏介面进行初 始化,以及指示灯的设置,然后根据玩家输入 的信号(2、3、4)分别进入两人战(如:图3)、三人 战(如:图4)、四人战(如:图5)游戏介面,在游戏介面函数里面会调用相关的棋子走动函 数、合法性 检查的相关 函数以及胜 利后燃放烟 花的函数, 当本盘游戏 下完或者玩 家想重新选 择游戏模式而按了b键即返回,则将会退回到初始化介面,若继续按b键则会退回到具 体的规则介绍介面,若还按b键则会退回到游戏的欢迎介面,除了在游戏规则的具体介 10 图 7 光标不会从头开始 图 8 放烟花 绍介面只能按b键返回和n键下一页外,其余介面可随时按0退出整个游戏程序,即直 接跳到整个游戏的结束介面(如:图6)。 2.2.22.2.2 棋子走动的函数棋子走动的函数 此函数是在玩家选择了游戏模式后才被调用的,游戏是以外圈为黄色作为光标, 每盘游戏都是从第一个玩家开始走棋。初始化时指示灯都为黄色在游戏开始的同时指 示灯会发出信号,即该谁走棋时相应的指示灯会变成相应的颜色。玩家移动光标用 w(左上方)、a(左下方)、s(右下方)、d(右上方)四个键来实现,用空格来选定 玩家要走的棋子及要放的位置,玩家在选择棋子时可重复选择,被选择的棋子的会以 绿色外圈作为标志,而且每个玩家都有自己的光标,即每个玩家走完棋后都会把他的 光标位置保存下来,以便下次轮到此玩家时, 他对应的光标会在他上次走过的位置,避免 从头开始(如:图7)。在每个玩家走完棋后,此 函数会返回一个key值,以确定下一个走棋的 玩家。 2.2.32.2.3 一子跳的合法性检查的相关函数的分一子跳的合法性检查的相关函数的分 析析 此函数是在棋子走动函数中被调用的,主要是检查玩家棋子一子跳及连续跳的合 法性。在棋子走动函数在首先会检查棋子是一步走,还是一子跳,如果玩家是一子跳, 则会调用一子跳的合法性检查的相关函数。 调用此函数需传入玩家选择的棋子的位置及要放的位置,在此函数中,从棋子位 置的第一个方向开始查找,每查找一个位置都会用一个栈把它保存下来,直到四个方 向都找完了,或者找到了要放的位置,则将栈清空。如果找到了则返回1,如果没找到 且栈为空,则返回0 。 2.2.42.2.4 判断是否胜利的相关程序的分析判断是否胜利的相关程序的分析(以两人战为例以两人战为例) 此程序是在游戏模式函数中运行的,这里以两人战模式为例。两人对战分别往对 方走,当一家的棋子完全占领对方的营区时则 表示该玩家胜利,该玩家也不再走棋,他的指 示灯上会记录该玩家的名次,并为此玩家燃放 烟花以表庆祝(如:图8) 。剩余玩家可继续走棋 子直到全部棋子都进入对方的营区,此时剩余 玩家的指示灯上也会记录相应玩家的名次同时 也会燃放烟花,则本盘游戏结束,将退回初始 介面。当然剩余玩家也可不再继续走棋,直接 按b键也可返回到初始化介面。 11 三三 程序的不足及其优化程序的不足及其优化 3.13.1 程序的不足程序的不足 只能在 dos 状态下进行,与在 windows 状态下进行的游戏相比存在着不能让玩家 自由操控棋子,游戏的玩家数和棋子数不多,其中在玩的过程中还没有声音,界面与 现在各种游戏比起来还是有很大的差距。在游戏的过程中所有的玩家只能通过四个键 来控制棋子,走与来极其不方便这与真正的自能化还有很大的差距。在走的过程中如 果玩家选错棋子可能重新选择(即毁棋)这与真正的游戏的理念不同。这样的情况无 疑会带给人相当大的挫折感等一些缺点。 3.23.2 程序的优化程序的优化 游戏的棋盘不够大,棋子的数量也不多,我们可能通过增加棋盘的大小,增多棋 子的数量来改进,从而让更多的玩家参与让玩家感受到更大的乐趣,程序中还有一些 细节做得不好,我们可以通过反复的思考让游戏运行更人性化,给玩家带来更大的乐 趣。 12 体体 会会 通过这次的 c 语言的课程设计,我觉得对我们每个参加的人提高都很大。在大家的 共同努力我们克服了一个又一个摆在我们面前的难题。这次课程设计的成功无疑肯定 了我们这个团体的合作精神,它不是靠一个人的努力就能完成的。在整个设计过程中 大家合理分工,遇到难题就共同探讨,通过各种渠道(如上网查资料,到图书馆查找 相关书籍)解决了我们遇到的问题。编写 c 语言源程序,然后是进行编译,这个环节 是一个非常痛苦和艰难的,常常会因为一小点的错误而在编译失败与再次修改的漫漫 循环之路中,但失败的越多,对人的考验就越多,在编译运行成功之后的享受成功的 喜悦也就越多,另外在调试程序的过程中不断的思考和运用已经学到的知识,这对于 自己是有很大的提高的。从中我们也感受到了编程是一项非常烦琐周密的工作,它不 但需要我们周密思考问题和处理问题的能力,更需要有足够的耐心和和严谨的学习作 风。通过本次的课程设计,我初步学会了课程设计的基本方法,虽然这次只是一个小 小的跳棋游戏,但对于我们初学者来说也是一件相对困难的事情。大家在这次跳棋游 戏中都受益匪浅。 13 参考文献参考文献 1谭明金,俞海英编著. c 语言程序设计实例精粹. 北京电子工业子出版社,2007.1 14 附附 录录 #include #include #include #include #include #include #define pi 3.1415926 #define m 10 #define m 13 #define n 13 char ch; int x,y,back,battle,mazemn; typedef struct/*用来记录坐标*/ int x; int y; node; /*棋盘中所有可以放棋子的坐标*/ node sate45=240,30,205,65,275,65,170,100,240,100,310,100, 30,240,65,205,65,275,100,170,100,240,100,310, 240,450,205,415,275,415,170,380,240,380,310,380, 450,240,415,205,415,275,380,170,380,240,380,310, 205,135,275,135,205,345,275,345,170,170,240,170, 310,170,170,310,240,310,310,310,240,240, 135,205,205,205,275,205,345,205,135,275, 205,275,275,275,345,275,170,240,310,240; /*玩家相应的指示灯的坐标*/ node tags4=60,60,60,420,445,420,445,60; node abcd4,interimm*n; typedef struct node seat; int dir; elem; elem sm*n; /*用来保存光标的坐标及其移动的方向*/ int top=-1; void menu();/*主功能函数*/ void law();/*介面的格式控制函数*/ void over();/*游戏退出时的欢迎介面*/ void first();/*游戏的欢迎介面*/ void second();/*游戏规则介绍函数*/ void initsate();/*游戏的初始化介面*/ void glorify1();/*介面的背景控制函数及传入数据的入口*/ void glorify2();/*游戏中的指示灯设置函数*/ void explode(int color); /*烟花函数*/ void twobattle();/*两人战控制函数*/ void threebattle();/*三人战控制函数*/ void fourbattle();/*四人战控制函数*/ node nextpos(node pos, int dir);/*查找下一个方向*/ int move(int i,int j,int key,void *buf);/*棋子走动的函数*/ 15 int mazepath(int mazemn, node start, node end,int key);/*合法性检查*/ int main()/*主函数*/ menu(); return 0; void menu()/*主功能函数*/ first();/*游戏的欢迎介面*/ while(1) back=0;x=10;y=10;battle=0; initsate();/*游戏的初始化介面*/ law();/*介面的格式控制函数*/ glorify2();/*游戏中的指示灯设置函数*/ glorify1();/*介面的背景控制函数及传入数据的入口*/ if(ch=b|ch=b)closegraph();second();/*游戏规则介绍函数*/ if(ch=0) closegraph();over();break;/*游戏退出时的欢迎介面*/ if(ch=2) battle=2;twobattle();/*2人战的控制函数*/ if(ch=3) battle=3;threebattle();/*3人战的控制函数*/ if(ch=4) battle=4;fourbattle();/*4人战的控制函数*/ void first()/*游戏的欢迎介面*/ int gdriver=detect,gmode; initgraph( setbkcolor(14); setcolor(2); setfillstyle(1,2); rectangle(120,20,522,460); floodfill(200,200,2); setcolor(4); settextstyle(1,0,8); outtextxy(175,30,“chinese“); outtextxy(155,100,“checkers“); rectangle(140,30,500,185); setcolor(5); settextstyle(1,0,4); outtextxy(250,220,“designers“); rectangle(145,210,495,320); setcolor(4); settextstyle(1,0,2); outtextxy(150,260,“ li aijin wen zicheng “); outtextxy(150,285,“ zhu chunmiao“); setcolor(9); settextstyle(1,0,1); outtextxy(150,340,“all rights reserved, rights reserved.“); setcolor(8); setfillstyle(1,8); rectangle(133,410,183,455); floodfill(135,425,8); rectangle(465,410,515,455); floodfill(470,420,8); setcolor(4); 16 settextstyle(0,0,1); outtextxy(133,405,“ press0:exit n:next“); outtextxy(145,430,“exit“); outtextxy(477,430,“next“); while(1) ch=getch(); if(ch=0) closegraph();over();exit (0); if(ch=n|ch=n) break; closegraph(); second(); void second()/*游戏规则介绍函数*/ int gdriver=detect,gmode; initgraph( setbkcolor(14); setcolor(2); setfillstyle(1,2); rectangle(120,20,522,460); floodfill(200,200,2); setcolor(4); settextstyle(3,0,0); outtextxy(280,25,“rules“); settextstyle(0,0,0); outtextxy(125,60,“1.checkers rules.“); setcolor(9); outtextxy(135,75,“ game start 2, 3, 4 people.playing chess with “); outtextxy(133,90,“the diagonal side confrontation with anti-clock-“); outtextxy(133,105,“wise.“); setcolor(4); outtextxy(125,130,“2.go sub-rules“); setcolor(9); outtextxy(135,145,“ pawn mobilecan be a step by step in a straight“); outtextxy(133,160,“line connecting the adjacent four directions if“); outtextxy(133,175,“, there is any position of adjacent to a pawn ,“); outtextxy(133,190,“the position a straight line under the direction“); outtextxy(133,205,“of a place is empty,you can directly jump to the“); outtextxy(133,220,“space,the jump of the process,as long as the same“); outtextxy(133,235,“conditions can be carried out to meet.who is the“); outtextxy(133,250,“first one to the opposite positions are all occ-“); outtextxy(133,265,“upied, will win.“); setcolor(4); outtextxy(125,290,“3.chess rules“); setcolor(9); outtextxy(135,305,“when the interface into the game, players used (“); outtextxy(133,320,“2-4), a few key people to choose war, once sele-“); outtextxy(133,335,“cted , the game will automatically start.to the“); outtextxy(133,350,“top of the first, according to the anti-clockw-“); outtextxy(133,365,“ise rotation moves. if you choose to return to b“); outtextxy(133,380,“by mistake. if you want to launch the game at 0.“); setcolor(8); setfillstyle(1,8); rectangle(133,410,183,455); 17 floodfill(135,425,8); rectangle(465,410,515,455); floodfill(470,420,8); setcolor(4); outtextxy(133,405,“ pressb:back n:next“); outtextxy(145,430,“back“); outtextxy(477,430,“next“); while(1) ch=getch(); if(ch=b|ch=b) closegraph();first(); if(ch=n|ch=n) break; closegraph(); void over()/*游戏退出时的欢迎介面*/ int i,gdriver,gmode; char s30; gdriver=detect; initgraph( setbkcolor(blue); cleardevice(); setviewport(100, 100, 550, 450, 1); setfillstyle(1, 2); setcolor(yellow); rectangle(0, 0, 439, 279); floodfill(50, 50, 14); setcolor(12); settextstyle(1, 0, 7); outtextxy(40, 5, “good better“); setcolor(15); settextstyle(3, 0, 5); outtextxy(25,80,“welcoming the next“); outtextxy(180,130,“play,“); outtextxy(120,180,“thank you!“); setcolor(14); settextstyle(2, 0, 15); outtextxy(60, 230, “see you later.“); getch();getch(); closegraph(); void initsate()/*游戏的初始化介面*/ int gdriver=detect,gmode,i; int arw10=0,240,240,0,480,240,240,480,0,240; initgraph( setbkcolor(15);

温馨提示

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

评论

0/150

提交评论