575203484C语言课程设计(论文)跳棋.doc

上传人:仙人指路1688 文档编号:2547195 上传时间:2023-02-20 格式:DOC 页数:42 大小:1.82MB
返回 下载 相关 举报
575203484C语言课程设计(论文)跳棋.doc_第1页
第1页 / 共42页
575203484C语言课程设计(论文)跳棋.doc_第2页
第2页 / 共42页
575203484C语言课程设计(论文)跳棋.doc_第3页
第3页 / 共42页
575203484C语言课程设计(论文)跳棋.doc_第4页
第4页 / 共42页
575203484C语言课程设计(论文)跳棋.doc_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《575203484C语言课程设计(论文)跳棋.doc》由会员分享,可在线阅读,更多相关《575203484C语言课程设计(论文)跳棋.doc(42页珍藏版)》请在三一办公上搜索。

1、 学年论文(课程论文、课程设计)题目: 跳 棋 作者: 所在系别: 计 算 机 学 院 专业年级: 2007级计算机与科学技术 指导教师: 职称: 讲 师 2008 年 12 月 31 日重庆文理学院课程论文(设计)、学年论文评分表系别: 计算机学院 论文(设计)性质: 题 目跳棋作 者专业年级07计算机科学与技术指导教师指导教师评语及评分建议 指导教师: 年 月 日院(系)或教研室意见 院(系)或教研室主任: 年 月 日目录一 概述61.1 引言61.2 游戏的介绍61.3 流程图7二 跳棋的程序设计与功能实现82.1 设计思路82.1.1 简介82.1.2 基本规则82.1.3 操作82.

2、1.4 跳棋小技巧92.2 程序的模块分析92.2.1 主功能函数92.2.2 棋子走动的函数102.2.3 一子跳的合法性检查的相关函数的分析102.2.4 判断是否胜利的相关程序的分析(以两人战为例)10三 程序的不足及其优化113.1程序的不足113.2 程序的优化11体 会12参考文献13附 录14摘要:论文运用数据结构的相关知识,用C语言编写的一个跳棋的小游戏。首先要先定义一个二维数组来记录屏幕上的各个点的状态,用不同功能的函数来实现对棋子的操作,让棋子一步一步的到达目的地。最后赢得胜利。跳棋由于是一款小游戏,棋盘设计与一般的棋盘不同,采用一个正方形来表示棋盘,正方形的四个角存放初始

3、的棋子。游戏可两个、三个,或四个人同时进行。最先到达对面的则赢得胜利。其中,数字(2-4)是选择人数游戏则同时自动开始,A表示左下方移动,W表示左上方移动,D表示右上方移动,S表示在下方移动,空格表示确定,B表示返回,0则退出。游戏中设计了精美的屏幕,在赢得游戏时会有烟花爆炸,同时出现玩家的名次。游戏中有各种提示以供参考,让玩家真正感受到游戏的快乐。游戏在DOS的状态下运行良好,能够实现上述功能。关键词:人工智能、应用、程序设计 Abstract:This paper is the use of the data structure of knowledge, and use the C la

4、nguage 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 ga

5、me 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 numbe

6、rs (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 t

7、he 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 intel

8、ligence, application, programm 一 概述1.1 引言 跳棋”是一款经典的益智小游戏,也是许多小朋友十分喜欢的小小游戏,很多的家长为了锻炼开发小孩的智力,买同类型的模具、游戏碟,现在可以在手机上玩,会让用户感到更加方便,让家长放心,想什么时候玩就什么时候玩,它规则简单,操作容易,让小孩在游戏的同时也对世界充满好奇。1.2 游戏的介绍 跳棋游戏要求通过将棋盘上一方的棋子在各种规则的限制下,经过玩家一步一步的计算和移动,全部一模一样的移动到对方的位置,先完成的则赢得游戏。跳棋有各种各样的板本,一般也有不同的规则。就是根据这此来设计的一款更为简单和更适合玩家的游戏。游戏可

9、同时(2-4)个人玩,只要选定几个人后,棋子会自动摆放,玩家只须要按动A,S,D,W四个方向键,就可以把棋子移动到想要走的位置上去,如果选择棋子错误则可用空格重新选择。本游戏在DOS模式下运行,但也不失游戏的快乐,在游戏的同时会有彩灯在屏幕上闪烁和各种精美的画面,让玩家真正感受到乐在其中。赢得游戏后欢送界面,并提醒玩家是否还想再来一盘。ch=0ch=getch()ch=else介面初始化开始ch=getch()ch=N|n规则介面ch=elsech=0退出游戏ch=getch()ch=B|bch=elsech=N|nch=B|bch=2ch=3ch=4二人战三人战四人战ch=elsech=0继

10、续游戏ch=B|bch=getch()1.3 流程图二 跳棋的程序设计与功能实现2.1 设计思路2.1.1 简介跳棋来自 1892 年的德国,由四角跳棋( Halma , 1883 )改良而成,流传到新大陆时为增添神秘东方色彩,被命名为“中国跳棋”跳棋规则简单易懂,一玩就会,实在是带着平和心情、进行美好回忆的益智棋戏。2.1.2 基本规则 图1 隔一子可跳游戏人数: 2 , 3 , 4 人玩家营区:起初玩家 6 颗棋子的放置位置,是一个直角三角形玩家目标:玩家的 6 颗棋子要离乡别井,连走带跳奔向对家,完全占领正对面的营区入营:棋子进入目标营区走子:只能一步走棋子可四个方向走动,每步 只能达到

11、相邻的空位跳子:可以连续跳一子跳棋规则:隔一个棋子可以跳(如:图 1)2.1.3 操作 1. 进入初始化介面,选择2、3、4可以分别进入2人、3人、4人作战介面2. 当游戏没有始时,四个指示灯为黄色,每轮游戏从第一个玩家开始走,相应的指示灯就会变成相应的颜色,谁的指示灯变了颜色,谁就可以走动棋子 3.w、a、s、d为方向键,选中自己棋子,点击空格,即可选定你要走的棋子4.如果中途想更换棋子,重复操作 2 即可 图2 初始化介面5.选中你要放的空位,点击空格,如果符合规则,则会将你选中的棋子移动到你选中 的空位中6.如果选中的棋子和空位不符合规则,则重复上述操作即可7. 选择B或b可以返回初始化

12、介面 (如:图 2);选择0可以退出整个游戏2.1.4 跳棋小技巧 1. 开局可以学习一些定式,快速出子,先手 尤其要制定自己的战术,贯彻下去以保持 先机。2.中盘注重攻守平衡,整体推进,最忌为对手以少量兵力占据要津,甚至分割棋势。 先手注意快攻压制,后手注意防稳觅机。3.收宫决战,注意不要因急于入营,而忘记为后续棋子搭桥助跳。2.2 程序的模块分析 该程序是由两个结构和若干个函数组成的,下面对其中的一些结构和函数做一下分 析或解释。2.2.1 主功能函数 图3 二人对战主功能函数包括了整个游戏程序的所有功能函数,首先调用了一个欢迎介面,然后用一个while循环重复调用游戏相关函数,直到按0退

13、出,退出后又有一个结束介面,按两次任意键退出。图6 游戏结束介面 图5 四人对战 图4 三人对战在while循环里面,首先对游戏介面进行初始化,以及指示灯的设置,然后根据玩家输入的信号(2、3、4)分别进入两人战(如:图3)、三人战(如:图4)、四人战(如:图5)游戏介面,在游戏介面函数里面会调用相关的棋子走动函数、合法性检查的相关函数以及胜利后燃放烟花的函数,当本盘游戏下完或者玩家想重新选择游戏模式而按了B键即返回,则将会退回到初始化介面,若继续按B键则会退回到具体的规则介绍介面,若还按B键则会退回到游戏的欢迎介面,除了在游戏规则的具体介绍介面只能按B键返回和N键下一页外,其余介面可随时按0

14、退出整个游戏程序,即直接跳到整个游戏的结束介面(如:图6)。2.2.2 棋子走动的函数此函数是在玩家选择了游戏模式后才被调用的,游戏是以外圈为黄色作为光标,每盘游戏都是从第一个玩家开始走棋。初始化时指示灯都为黄色在游戏开始的同时指示灯会发出信号,即该谁走棋时相应的指示灯会变成相应的颜色。玩家移动光标用w(左上方)、a(左下方)、s(右下方)、d(右上方)四个键来实现,用空格来选定玩家要走的棋子及要放的位置,玩家在选择棋子时可重复选择,被选择的棋子的会以绿色外圈作为标志,而且每个玩家都有自己的光标,即每个玩家走完棋后都会把他的光标位置保存下来,以便下次轮到此玩家时,他对应的光标会在他上次走过的位

15、置,避免从头开始(如:图7)。在每个玩家走完棋后,此函数会返回一个key值,以确定下一个走棋的玩家。图7 光标不会从头开始2.2.3 一子跳的合法性检查的相关函数的分析此函数是在棋子走动函数中被调用的,主要是检查玩家棋子一子跳及连续跳的合法性。在棋子走动函数在首先会检查棋子是一步走,还是一子跳,如果玩家是一子跳,则会调用一子跳的合法性检查的相关函数。调用此函数需传入玩家选择的棋子的位置及要放的位置,在此函数中,从棋子位置的第一个方向开始查找,每查找一个位置都会用一个栈把它保存下来,直到四个方向都找完了,或者找到了要放的位置,则将栈清空。如果找到了则返回1,如果没找到且栈为空,则返回0 。2.2

16、.4 判断是否胜利的相关程序的分析(以两人战为例) 图8 放烟花此程序是在游戏模式函数中运行的,这里以两人战模式为例。两人对战分别往对方走,当一家的棋子完全占领对方的营区时则表示该玩家胜利,该玩家也不再走棋,他的指示灯上会记录该玩家的名次,并为此玩家燃放烟花以表庆祝(如:图8)。剩余玩家可继续走棋子直到全部棋子都进入对方的营区,此时剩余玩家的指示灯上也会记录相应玩家的名次同时也会燃放烟花,则本盘游戏结束,将退回初始介面。当然剩余玩家也可不再继续走棋,直接按B键也可返回到初始化介面。三 程序的不足及其优化3.1程序的不足只能在DOS状态下进行,与在WINDOWS状态下进行的游戏相比存在着不能让玩

17、家自由操控棋子,游戏的玩家数和棋子数不多,其中在玩的过程中还没有声音,界面与现在各种游戏比起来还是有很大的差距。在游戏的过程中所有的玩家只能通过四个键来控制棋子,走与来极其不方便这与真正的自能化还有很大的差距。在走的过程中如果玩家选错棋子可能重新选择(即毁棋)这与真正的游戏的理念不同。这样的情况无疑会带给人相当大的挫折感等一些缺点。3.2 程序的优化 游戏的棋盘不够大,棋子的数量也不多,我们可能通过增加棋盘的大小,增多棋子的数量来改进,从而让更多的玩家参与让玩家感受到更大的乐趣,程序中还有一些细节做得不好,我们可以通过反复的思考让游戏运行更人性化,给玩家带来更大的乐趣。 体 会 通过这次的C语

18、言的课程设计,我觉得对我们每个参加的人提高都很大。在大家的共同努力我们克服了一个又一个摆在我们面前的难题。这次课程设计的成功无疑肯定了我们这个团体的合作精神,它不是靠一个人的努力就能完成的。在整个设计过程中大家合理分工,遇到难题就共同探讨,通过各种渠道(如上网查资料,到图书馆查找相关书籍)解决了我们遇到的问题。编写C语言源程序,然后是进行编译,这个环节是一个非常痛苦和艰难的,常常会因为一小点的错误而在编译失败与再次修改的漫漫循环之路中,但失败的越多,对人的考验就越多,在编译运行成功之后的享受成功的喜悦也就越多,另外在调试程序的过程中不断的思考和运用已经学到的知识,这对于自己是有很大的提高的。从

19、中我们也感受到了编程是一项非常烦琐周密的工作,它不但需要我们周密思考问题和处理问题的能力,更需要有足够的耐心和和严谨的学习作风。通过本次的课程设计,我初步学会了课程设计的基本方法,虽然这次只是一个小小的跳棋游戏,但对于我们初学者来说也是一件相对困难的事情。大家在这次跳棋游戏中都受益匪浅。参考文献1 谭明金,俞海英编著. C语言程序设计实例精粹. 北京电子工业子出版社,2007.1附 录#include#include#include#include#include#include#define pi 3.1415926#define M 10#define m 13#define n 13ch

20、ar 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,1

21、35,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; /*用来保存光标

22、的坐标及其移动的方向*/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();/*两人战控制函数*

23、/void threebattle();/*三人战控制函数*/void fourbattle();/*四人战控制函数*/node NextPos(node pos, int dir);/*查找下一个方向*/int move(int i,int j,int key,void *buf);/*棋子走动的函数*/int MazePath(int mazemn, node start, node end,int key);/*合法性检查*/int main()/*主函数*/ menu(); return 0;void menu()/*主功能函数*/ first();/*游戏的欢迎介面*/ while(

24、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;threeba

25、ttle();/*3人战的控制函数*/ if(ch=4) battle=4;fourbattle();/*4人战的控制函数*/ void first()/*游戏的欢迎介面*/ int gdriver=DETECT,gmode; initgraph(&gdriver,&gmode,c:); 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

26、); 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); outt

27、extxy(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); settextstyle(0,0,1); outtextxy(133,405, press0:Exit N:Next); outtextxy(145,430,Exit); outtextxy(477,4

28、30,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(&gdriver,&gmode,c:); setbkcolor(14); setcolor(2); setfillstyle(1,2); rectangle(120,20,522,460); floodfill(200,200,2); setcol

29、or(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); out

30、textxy(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

31、 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-); outtex

32、txy(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); out

33、textxy(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); floodfill(135,425,8); rectangle(465,4

34、10,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

35、; initgraph(&gdriver, &gmode, ); 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); outte

36、xtxy(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; initgr

37、aph(&gdriver,&gmode,c:); setbkcolor(15); setcolor(15); setlinestyle(0,0,3); setfillstyle(1,2); drawpoly(5,arw); floodfill(200,200,15); setlinestyle(1,0,1); setcolor(1); for(i=0;i0.1) t1=t2;clr=0; for(i=0;i108;i+) setcolor(clrsclr); circle(x,y,M); setfillstyle(1,clrsclr); floodfill(x,y,clrsclr); xor=1; if(x630&y=10) if(x=210) x=270; else x=x+20; xor=0; if(x=630&y10&y=470&xor) if(x=270) x=210; else x=x-20; xor=0; if(x=10&y10&xor) if(y=270) y=210; else y=y-20; xor=0; clr+;clr=clr%10; clr=clrs9; for(i=9;i0;i-) clrsi=clrsi-1;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号