游戏程序设计(2)--“连连看”设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

游戏程序设计第一单元“连连看”程序设计1.1预备知识•1、窗体程序•2、按钮事件•3、产生随机数1、窗体程序关键语句:setSize(300,200);setVisible(true);setDefaultCloseOperation(EXIT_ON_CLOSE);容器布局:setLayout(布局模式);默认边界布局BorderLayout浮动布局FlowLayout2、按钮事件ActionListener接口:(1)注册监听器按钮.addActionListener(this);(2)触发事件actionPerformed(ActionEvente){……..}3、产生随机数随机函数:Math.random()产生0-1之间的随机数若要产生100以内的随机整数:(int)(Math.random()*100)1.2“连连看”游戏算法分析1.2.1“连连看”算法分析•为简便起见,我们用数字代替一般“连连看”游戏画面的图形,如图所示。1.2.2“连连看”的游戏规则•1、“连连看”游戏的基本规则•(1)选择一对内容相同的图案进行连线,但此连线不能穿跨其他图案;•(2)连线的转折点不能多于两个,如符合规定则消除此对图案。•2、“连连看”游戏的几种可以消去情况•(1)要消去的两个图案相邻,如图15.2(a)所示。•(2)要消去的两个图案在同一直线上,如图15.2(b)所示。•(3)要消去的两个图案不在同一直线上,如图15.2(c)、(d)所示。3、“连连看”游戏连接算法思路•1、什么是连接折点?如图15.3所示•2、连接折点算法基本概念如图15.3所示•3、连接折点算法分析•(1)判断选取的两个点(P1,P2)的内容是否一样。•(2)判断P1、P2的位置关系。•(3)如果P1、P2相邻,如图15.4(a)所示,直接消去该两点,即把这两点的内容消去(把该两点内容设为不可见)。•(4)如果P1、P2在同一直线上,但不相邻,如图15.4(b)所示。先判断两个点P1,P2之间是否能直接建立连接(连线之间无折点),如果可以的话消去该两点,如果不可以的话就在其它三个方向上的空点按照折点法基本概念开始取折点Z1,Z2,然后判断P1—Z1,Z1—Z2,Z2—P2是否能连通,如果都可以连通就消去P1,P2两点。要消去的两个点不在同一直线上也不相邻。•(5)在P1,P2四个方向上的空点按照连接折点的基本概念开始取折点Z1,Z2,然后判断P1—Z1,Z1—Z2,Z2—P2是否能连通,如果都可以连通就消去P1,P2两点。如图15.3所示。图15.3连接折点图15.4直线连接1.3“连连看”游戏界面设计•“连连看”游戏界面设计算法分析•1、“连连看”游戏界面算法设计思路•在设计“连连看”游戏时,我们把所有图形(30个)按如图15.5(a)所示的方法排列,即把图形安排到8行×7列的表格中,四周有一排空格。把图形块做成按钮,这样,游戏操作者点击图形块时,就能触发事件。再定义一组二维数组与按钮的位置相对应,只要数组元素的值相同就代表图形相同。这样,要判断二块图形是否相同,只要比较二维数组元素的值是否相同。如图15.5(b)所示。•“连连看”游戏界面设计还要考虑3个问题:•(1)图形块上的数字必须是必须是成对出现的;•(2)图形块上的数字是随机的;•(3)图形块的相同数字的位置是随机的。•2、建立一个8×7的二维数组存放6×5个随机数•intd[][]={•{0,0,0,0,0,0,0},•{0,0,0,0,0,0,0},•{0,0,0,0,0,0,0},•{0,0,0,0,0,0,0},•{0,0,0,0,0,0,0},•{0,0,0,0,0,0,0},•{0,0,0,0,0,0,0},•{0,0,0,0,0,0,0}};3、建立一个产生随机数字的方法,且每个随机数都是成对出现的。publicvoidsuiji()//产生15对随机数字{intm,n,x,i=1,j=1;for(m=1;m=15;m++){x=(int)(Math.random()*25+1);for(n=1;n=2;n++){while(d[i][j]!=0){i=(int)(Math.random()*6+1);j=(int)(Math.random()*5+1);}this.d[i][j]=x;}}}2个不同坐标存放相同的数x位置坐标产生随机数(15个)“连连看”界面设计示例•【例1-3】设计一个随机分布数字的“连连看”游戏界面程序。如图所示。1.4“连连看”游戏消除相同数字的算法设计消除两个相同图案的图形块要消除两个相同图案的图形块,需要解决3个问题:(1)记录2次鼠标所点击的图案(数字),并进行比较;(2)记录2次鼠标所点击图形块的位置,要将其消除;(3)鼠标2次所点击的图形块不能是同一位置的图形。1、区分鼠标点击的次数•由于游戏规定必须用鼠标点击2个相同的图案才能消除图形块,因此,使用2个字符串变量来标记鼠标点击的次数•Strings1=first,s2=“;•当(s1.trim()).equals(first)时,说明是鼠标第1次点击图形块,否则,是第2次点击图形块。2、记录鼠标点击2个不同图形块的位置•由于游戏规定必须2个不同位置的相同图案的图形块才能被消除,因此,需要记录2次用鼠标点击的图形块的位置。•设鼠标点击的图形块为btn0,其位置为(i,j),图形块上的图案(数字)为d[i][j]。3、消除相同图案(相同数字)的图形块当2个不同图形块的图案相同时,则将其设为setVisible(false)。if(n1==n2&&btn2!=btn1){btn2.setVisible(false);btn1.setVisible(false);}【例1-4】消除两个相同图案的图形块1.5消除相邻两点图案相同的图形块前面例1-4消除的是任意位置上的两个相同图案的图形块,这不符合“连连看”的游戏规则。下面讨论消除相邻两点图案相同的图形块,即如图15.7所示的情况。两个图形块相邻的条件•设两个图形块的行列坐标为P1(x1,y1)和P2(x2,y2),则其相邻的条件为:•x1==x2且y1==y2+1,•或x1==x2且y1==y2–1,•或x1==x2+1且y1==y2,•或x1==x2-1且y1==y2。•即:•(x1==x2&&(y1==y2+1||y1==y2-1))||((x1==x2+1||x1==x2-1)&&(y1==y2))1.6“连连看”游戏图形块重新排列的算法设计在玩“连连看”游戏时,当遇到无符合规则的图形块可消除的情况,这时,需要重新排列图形块。(1)重新排列图形块时,原有图形块的图案不能改变。即要保存原有各图形块的图案;(2)产生随机坐标位置,并将保存的图案赋值给该位置数组元素。【例15-3】具有重新排列图形块功能的游戏程序。课程设计•1、编程,消除在一直线上的两个图案数字相同的图形块,如图15.2(b)所示。•2、编程,消除不在一直线上的两个图案数字相同的图形块,如图15.2(c)、(d)所示。

1 / 24
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功