连连看源代码
C#实现连连看功能(推荐)
C#实现连连看功能(推荐)本⽂是利⽤C#实现连连看的⼩例⼦,以供学习分享使⽤。
初始化布局(横竖⼗⾏⼗列,共100个单元格,每⼀个格⼀个按钮,背景图为⽔果图⽚,随机⽣成)。
初始化对应棋盘(⽤⼆维数组表⽰【0表⽰空⽩,⾮0表⽰界⾯对象】)和页⾯相对应,同步操作。
判断点击的图⽚是否可以消掉(转化为⼆维数组【以⽔平⽅向,垂直⽅向,⼀个拐⾓,两个拐⾓的步骤进⾏判断】)。
如可以消掉,隐藏图⽚,增加分数。
时间限制,采⽤倒计时⽅式。
线程:Thread,后台运⾏时间控制【倒计时⽅式】。
界⾯闪烁:当界⾯中的控件较多,且有背景图时,界⾯就会出现闪烁【解决⽅式:1,双缓冲⽅式 2. 设置控件创建样式,统⼀刷新】。
TableLayoutPanel:表⽰⼀个⾯板,它可以在⼀个由⾏和列组成的⽹格中对其内容进⾏动态布局【新增元素,设置⾏列,以及样式】。
资源⽂件:Resources ⽤于存放图⽚及其他资源。
Button:FlatAppearance获取⽤于指⽰选中状态和⿏标状态的边框外观和颜⾊。
效果图图下(⼀)【开始,初始化后,倒计时功能,停⽌功能】:效果图(⼆)【时间结束】核⼼代码如下:1234567891011121314151617 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34/// <summary>/// 连连看帮助类/// </summary>public class LinkHelper{/// <summary>/// 连连看,看板/// </summary>public int[,] LinkBoard { get; set; } /// <summary>/// 连线成功事件/// </summary>public event EventHandler SucClick; /// <summary>/// 连接失败事件/// </summary>public event EventHandler FailClick; private int col = 10;public int Col{35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 get{return col;}set{col = value;}}private int row = 10;public int Row{get{return row;}set{row = value;}}/// <summary>/// 尝试连线/// </summary>public void LinkLine(Point first, Point second){EventArgs e = new EventArgs();if(checkLink(first, second)){//连线成功this.LinkBoard[first.X, first.Y] = 0;this.LinkBoard[second.X, second.Y] = 0;if(this.SucClick != null){SucClick(this, e);}}else{//连线失败if(this.FailClick != null){FailClick(this, e);}}}/// <summary>/// 是否赋值/// </summary>/// <param name="p"></param>/// <returns></returns>public bool IsChecked(Point p){bool flag = false;if(p.X != -1 && p.Y != -1){flag = true;}return flag;}#region 核⼼算法/// <summary>/// 判断是否连线成功/// </summary>/// <param name="a">第⼀个点击对象</param>/// <param name="b">第⼆个点击对象</param>/// <returns></returns>private bool checkLink(Point a, Point b){if(!Point.Equals(a, b)){if(this.LinkBoard[a.X, a.Y] == this.LinkBoard[b.X, b.Y]) {97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 if(a.X == b.X && horizon(a, b)){return true;}if(a.Y == b.Y && vertical(a, b)){return true;}if(oneCorner(a, b)){return true;}else{return twoCorner(a, b);}}else{//如果点击的不是同⼀个图案,直接返回falsereturn false;}}else{//如果点击的是同⼀个位置的图案,直接返回false;return false;}}/// <summary>/// ⽔平连线/// </summary>/// <param name="a"></param>/// <param name="b"></param>/// <returns></returns>private bool horizon(Point a, Point b){int col_start = a.Y < b.Y ? a.Y : b.Y; //获取a,b中较⼩的y值 int col_end = a.Y < b.Y ? b.Y : a.Y; //获取a,b中较⼤的值 //遍历a,b之间是否通路,如果⼀个不是就返回false;for(int i = col_start + 1; i < col_end; i++){if(this.LinkBoard[a.X, i] != 0){return false;}}return true;}/// <summary>/// 垂直连线/// </summary>/// <param name="a"></param>/// <param name="b"></param>/// <returns></returns>private bool vertical(Point a, Point b){int row_start = a.X < b.X ? a.X : b.X;int row_end = a.X < b.X ? b.X : a.X;for(int i = row_start + 1; i < row_end; i++){if(this.LinkBoard[i, a.Y] != 0){return false;}}return true;}/// <summary>/// ⼀个拐⾓/// </summary>/// <param name="a"></param>/// <param name="b"></param>159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 /// <returns></returns>private bool oneCorner(Point a, Point b){Point c = new Point(b.X, a.Y);Point d = new Point(a.X, b.Y);//判断C点是否有元素if(this.LinkBoard[c.X, c.Y] == 0){bool path1 = horizon(b, c) && vertical(a, c);return path1;}//判断D点是否有元素if(this.LinkBoard[d.X, d.Y] == 0){bool path2 = horizon(a, d) && vertical(b, d);return path2;}else{return false;}}/// <summary>/// 两个拐⾓/// </summary>/// <param name="a"></param>/// <param name="b"></param>/// <returns></returns>private bool twoCorner(Point a, Point b){List<Line> ll = scan(a, b);if(ll.Count == 0){return false;}for(int i = 0; i < ll.Count; i++){Line tmpLine = ll[i];if(tmpLine.direct == 1){if(vertical(a, tmpLine.a) && vertical(b, tmpLine.b)){return true;}}else if(tmpLine.direct == 0){if(horizon(a, tmpLine.a) && horizon(b, tmpLine.b)){return true;}}}return false;}/// <summary>/// 扫描A与B之间的连接点组成的线/// </summary>/// <param name="a"></param>/// <param name="b"></param>/// <returns></returns>private List<Line> scan(Point a, Point b){List<Line> linkList = new List<Line>();//检测a点,b点的左侧是否能够垂直直连for(int i = a.Y; i >= 0; i--){if(this.LinkBoard[a.X, i] == 0 && this.LinkBoard[b.X, i] == 0 && vertical(new Point(a.X, i), new Point(b.X, i))) {linkList.Add(new Line(new Point(a.X, i), new Point(b.X, i), 0));221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262}}//检测a 点,b 点的右侧是否能够垂直直连 for (int i = a.Y; i < Col; i++) { if (this.LinkBoard[a.X, i] == 0 && this.LinkBoard[b.X, i] == 0 && vertical(new Point(a.X, i), new Point(b.X, i))) {linkList.Add(new Line(new Point(a.X, i), new Point(b.X, i), 0));}}//检测a 点,b 点的上侧是否能够⽔平直连 for (int j = a.X; j >= 0; j--) { if (this.LinkBoard[j, a.Y] == 0 && this.LinkBoard[j, b.Y] == 0 && horizon(new Point(j, a.Y), new Point(j, b.Y))) { linkList.Add(new Line(new Point(j, a.Y), new Point(j, b.Y), 1));}}//检测a 点,b 点的下侧是否能够⽔平直连 for (int j = a.X; j < Row; j++) { if (this.LinkBoard[j, a.Y] == 0 && this.LinkBoard[j, b.Y] == 0 && horizon(new Point(j, a.Y), new Point(j, b.Y))) { linkList.Add(new Line(new Point(j, a.Y), new Point(j, b.Y), 1)); }}return linkList;} #endregion }以上所述是⼩编给⼤家介绍的C# 实现连连看功能,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。
FLASH连连看算法分析及源代码
FLASH连连看算法分析及源代码做FLASH连连看有专门的地方,下面咱们就详细分析FLASH连连看的算法。
在做连连看之前,咱们依照折线数的不同分为3种情形:第一种情形:如图,方块1与方块2 在同一水平线上,方块1与方块3在同一垂直线上,这确实是咱们的第一种情形:在实际应历时,咱们在1和2之间或1和3之间实例化一条线段,用hitTestObject 来测试,若是与这条线段相交的图片个数小于等于2,那么这两个图片确实是连通的。
第二种情形:确实是2和3 的关系了,在2和3之间实例化四条线段,两个水平的,两个垂直的,如以下图所示:与A相交的图片数加上与B相交的图片数小于等于2或与C相交的图片数加上与D相交的图片数小于等于2,那么这两个图片确实是连通的。
第三种情形:第三种情形要紧与前两种情形配合利用,若是前两种情形测试不成功,那么直接跳转到第三种情形,若是第三种情形测试仍然不成功,那么这两个图片不连通,也确实是说用户进行了一次错误操作。
第三种情形比较复杂,测试两个图片是不是连通分为两种情形,一种是A线段是水平的(垂直扫描),另一种是A线段是垂直的(水平扫描)。
线段是水平的,咱们要平均距离垂直扫描并实例化A线段,只有在测试到与A相交的图片数为0时,跳出扫描的循环,而且实例化B线段和C线段,若是与B线段相交的图片数加上与C线段相交的图片数小于等于2,那么两个图片连通。
线段是垂直的,算法与上者相同,只是扫描的方向不同。
好了,下面咱们来亲手做一个简单的连连看。
咱们那个连连看很简单,只要依照下面的操作就能够够了。
假设要运行此例如,请确保在FLASH文件同目录下有一个images文件夹,其中有,,...共40个32*32像素的gif格式的图片。
打开flash cs3,新建一个FLASH文档,在文档类中填写simplellk,在同目录下新建一个AS文件,名为,在其中输入以下代码:package {/**连连看原始模型,供AS3交流所用*/importimportimportpublic class simplellk extends Sprite {private var myllk:llk;private var myllkarr:Array=new Array;private var image:Loader;public function simplellk():void {setlisteners();addllk();}private function setlisteners():void { ("mouseDown",click_stage);("keyUp",keyup);}private function keyup(event):void{if==116){pl();}}private function addllk():void {for (var i:int=0; i<80; i++) {myllk=new llk;image=new Loader;(new URLRequest("images/"+((i%40)+1)+".gif")); (image);=30+(i%10)*40;=30+(i/10)*40;(myllk);addChild(myllk);}pl();itTestPoint(mouseX,mouseY)) {myllkarr[i].selected=!myllkarr[i].selected; myllkarr[i].show_selected();for (var j in myllkarr) {if (j!=i&&myllkarr[j].selected&&j%2)==i%2)) { if (testbylevel(i,j)) {myllkarr[i].removethis();myllkarr[j].removethis();if (i>j) {(i,1);(j,1);} else {(j,1);(i,1);}break;} else {myllkarr[i].selected=false;myllkarr[i].show_selected();myllkarr[j].selected=false;myllkarr[j].show_selected();}} else {if (j!=i) {myllkarr[j].selected=false;myllkarr[j].show_selected();}}}break;}}}private var plarr:Array=new Array;private function pl():void {=30 + () * 10) * 40;myllkarr[aa].y=30 + () * 8) * 40;for (var j:int=0; j < ; j++) {if (myllkarr[aa].x == plarr[j].x && myllkarr[aa].y == plarr[j].y) { cxpl(aa);break;}}for (var i:int=0; i < ; i++) {cxpl(i);(myllkarr[i]);}}private function testbylevel(a:Number,b:Number):Boolean { == myllkarr[b].y || myllkarr[a].x == myllkarr[b].x) {var sprite5:Sprite=new Sprite;+ 16,myllkarr[a].y + 16);+ 16,myllkarr[b].y + 16);addChild(sprite5);js=0;for (var i in myllkarr) {if (myllkarr[i].hitTestObject(sprite5)) {js++;if (js > 2) {break;}}if (js <= 2) {unit=true;} else {unit=testlevelthird(a,b);}} else {var sprite1:Sprite=new Sprite; var sprite2:Sprite=new Sprite; var sprite3:Sprite=new Sprite; var sprite4:Sprite=new Sprite; var test1:Boolean=false;var test2:Boolean=false;+ 10,myllkarr[a].y + 10);+ 10,myllkarr[a].y + 10);+ 10,myllkarr[a].y + 10);+ 10,myllkarr[b].y + 10);+ 10,myllkarr[a].y + 10);+ 10,myllkarr[b].y + 10);+ 10,myllkarr[b].y + 10);+ 10,myllkarr[b].y + 10);addChild(sprite1);addChild(sprite2);addChild(sprite3);addChild(sprite4);js=0;for (var d in myllkarr) {if (myllkarr[d].hitTestObject(sprite1) || myllkarr[d].hitTestObject(sprite2)) { js++;if (js > 2) {break;}}}if (js <= 2) {test1=true;}js=0;for (var e in myllkarr) {if (myllkarr[e].hitTestObject(sprite3) || myllkarr[e].hitTestObject(sprite4)) { js++;if (js > 2) {break;}}}if (js <= 2) {test2=true;}if (test1 || test2) {unit=true;} else {unit=testlevelthird(a,b);}}return unit;}private function testlevelthird(c:Number,d:Number):Boolean { var unit:Boolean=false;var js:int=0;itTestObject(sprite10)) {js++;break;}}if (js == 0) {var sprite11:Sprite=new Sprite;+ 16,6 + 40 * kk);+ 16,myllkarr[c].y + 16);addChild(sprite11);js=0;for (var qq in myllkarr) {if (myllkarr[qq].hitTestObject(sprite11)) { js++;if (js > 1) {break;}}}if (js <= 1) {test3=true;} else {test3=false;}var sprite12:Sprite=new Sprite;+ 16,6 + 40 * kk);+ 16,myllkarr[d].y + 16);addChild(sprite12);js=0;for (var ww in myllkarr) {if (myllkarr[ww].hitTestObject(sprite12)) { js++;if (js > 1) {break;}}}if (js <= 1) {test4=true;} else {test4=false;}if (test3 && test4) {unit=true;break;}}}for (var ii:int=0; ii < 12; ii++) { sprite7=new Sprite ;+ 40 * ii,myllkarr[c].y + 16);+ 40 * ii,myllkarr[d].y + 16); addChild(sprite7);js=0;for (var jj in myllkarr) {if (myllkarr[jj].hitTestObject(sprite7)) { js++;break;}}if (js == 0) {var sprite8:Sprite=new Sprite;+ 40 * ii,myllkarr[c].y + 16);+ 16,myllkarr[c].y + 16);addChild(sprite8);js=0;for (var pp in myllkarr) {if (myllkarr[pp].hitTestObject(sprite8)) { js++;if (js > 1) {break;}}}if (js <= 1) {test1=true;} else {test1=false;}var sprite9:Sprite=new Sprite;+ 40 * ii,myllkarr[d].y + 16);+ 16,myllkarr[d].y + 16);addChild(sprite9);js=0;for (var ll in myllkarr) {if (myllkarr[ll].hitTestObject(sprite9)) { js++;if (js > 1) {break;}}}if (js <= 1) {test2=true;} else {test2=false;}if (test1 && test2) {unit=true;break;}}}return unit;}}}importclass llk extends Sprite { private var mouver:Sprite; private var select:Sprite;public var selected:Boolean=false; public function llk():void {=true;setface();;0, 32, 32);=false;select = new Sprite;.3);0, 32, 32);=false;}private function configlisteners():void { ("mouseOver", over_this); ("mouseOut", out_this);}private function out_this(event):void { if (!selected) {try {removeChild(mouver);} catch (error:Error) {}}}private function over_this(event):void { if (!selected) {addChild(mouver);}}//------------------------------------------------------------------- //public functionspublic function show_selected():void {if (selected) {addChild(select);try {removeChild(mouver);} catch (error:Error) {}} else {try {removeChild(mouver);} catch (error:Error) {}try {removeChild(select);} catch (error:Error) {}}}public function removethis():void { ("mouseOver", over_this);("mouseOut", out_this);(this);}}好了,Ctrl+enter就能够够看到成效了,按F5能够重排。
连连看源代码
panel1.add(b7); panel1.add(b8); panel1.add(b9);
panel1.add(b10); panel1.add(b11); panel1.add(b12);
f.pack();
f.setBounds(25,10,600,750);
f.setResizable(false);
f.setVisible(true);
bc.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e) { ex(); }
bc=new Button(" EXIT");
br=new Button("RESET");
p1=new Button();
b1=new Button(String.valueOf(d[1][1]));
b2=new Button(String.valueOf(d[1][2]));
});
b23=new Button(String.valueOf(d[5][3]));
b24=new Button(String.valueOf(d[5][4]));
b25=new Button(String.valueOf(d[5][5]));
b26=new Button(String.valueOf(d[6][1]));
public void mouseClicked(MouseEvent e){ wei(1,1,b1); }
});
连连看delphi代码
function CheckLink(Link: TLink):Boolean;
function CheckPoint(Point:TPoint):Boolean;
function xyToPoint(MatrixPoint:TPoint):TPoint;
AppPath:string; //运行路径
DicPath:string; //字典图片路径
Fullscreen : TBitmap; //存放真个游戏窗体的图片
bmpMatrix:TBMPMatrix; //游戏中的小图构成的矩阵
Rect(0,0,WINDWIDTH,WINDHEIGHT));
//把整个屏幕复制到BITMAP中
finally
FullScreenCanvas.Free;//释放CANVAS对象
ReleaseDC(0,DC);//释放DC
end;
//WinBMP.LoadFromFile('C:\temp\w1.BMP');
GetDICBmps(dicPath); //加载字典图片数组DicBmps
SetWindPos(HWND_TOPMOST); //游戏窗体置前
end;
{windows api 设置游戏窗体最前}
function TfrmLinkTool.SetWindPos(HWND_TOPMOST:LongWord): Boolean;
procedure SetWorking(isValue:Boolean);
procedure RegHotKey();
procedure UnRegHotKey();
连连看源代码
}
}
}
if (x0>x) {
for (n=x0;n>=x+1 ;n-- ) {
if (grid[n][j]!=0) {
k=0;
break;
}
if(grid[n][j]==0 && n==x+1) {
remove();
}
}
}
rows=(int)(Math.random()*5+1);
}
this.grid[cols][rows]=randoms;
}
}
}
public void fraction(){
fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText())+100));
while(grid[cols][rows]!=0) {
cols=(int)(Math.random()*6+1);
rows=(int)(Math.random()*5+1);
}
this.grid[cols][rows]=save[n];
n--;
}
mainFrame.setVisible(false);
centerPanel.add(diamondsButton[cols][rows]);
}
}
exitButton=new JButton("退出");
exitButton.addActionListener(this);
resetButton=new JButton("重列");
Java课程设计连连看游戏(含代码)
Java程序课程设计任务书一、主要任务与目标1、了解图形用户界面的概念;2、了解AWT的基本体系结构,掌握窗口的基本原理;3、掌握几种布局管理器的使用方法;4、掌握java的事件处理机制;5、了解Swing的基本体系结构,掌握Swing组件的使用方法;6、掌握java小程序的工作原理和使用方法;7、该游戏还将设置退出,再来一局按钮,并实现相应的功能。
8、设计一个用户注册登录界面二、主要内容与基本要求游戏规则是模仿网络上普通的连连看游戏,主要是鼠标两次点击的图片能否消去的问题。
当前,前提是点击两张相同的图片,若点击的是同一张图片或者两张不同的图片,则不予处理。
在两张想同图片所能连通的所有路径中,如果存在一条转弯点不多于两个的路径,就可以消去;如果没有,则不予处理。
该游戏由30张不同的图片组成,游戏开始将会出现30张随机组合的图片,在规则下点击两张相同的图片后图片将会消失。
图片全部消完为游戏成功。
游戏还将设置退出,再来一局的按钮,和倒计时的功能,方便用户进行操作。
并且有一个用户登录注册界面,玩家必须登录以后才可以进行游戏。
三、计划进度12月28日~ 12月29日:课程设计选题,查找参考资料12月30日~ 12月31日:阅读参考书籍,收集资料,完成需求分析1月1日~ 1月3日:系统的代码设计及实现,数据库设计与实现1月4日~ 1月5日:系统的调试,修改,完善1月6日~ 1月7日:完成课程设计报告,准备答辩四、主要参考文献[1] 刘宝林.Java程序设计与案例习题解答与实验指导[M].[2] 王鹏何云峰.Swing图形界面开发与案例分析[M].[3](美)Karl Avedal , Danny Ayers, Timothy Briggs. JSP编程指南[M]. 电子工业出版社, 2004,47-125.[4](美)Mark Linsenbardt. JSP在数据库中的应用与开发[M]. 希望电子出版社,2005,210-236.[5] Dianne Phelan,Building a simple web database application[C].IEEE InternationalProfessional Communication Conference, 2004, 79-86.[6](美)Karl Avedal,Danny Ayers,Timothy Briggs.JSP编程指南[M].电子工业出版社,2006,47-125.[7] Dianne Phelan,Building a simple web database application[C].IEEE InternationalProfessional Communication Conference, 2005, 79-86.[8] Altendorf. Eric, Hohman. Moses, Zabicki. Roman. Using J2EE on a large,web-based project[J]. IEEE Software.2002,19(02):81-89.摘要当今社会,休闲型游戏越来越得到人们的喜爱,我所做的毕业设计实例“连连看游戏的设计与实现”是近几年来网络上非常流行的一种二维休闲游戏,它对电脑配置要求不高,娱乐性强,易于上手。
C语言实现数字连连看
C语⾔实现数字连连看本⽂实例为⼤家分享了C语⾔实现数字连连看的具体代码,供⼤家参考,具体内容如下要求连连看⼩游戏开发,使⽤⼆维数组来保存游戏地图的数据,实现连连看的核⼼功能。
欢乐连连看的功能有:主界⾯、开始游戏、消⼦、判断胜负、提⽰、重排、计时、游戏模式。
主界⾯游戏主界⾯就是进⾏各项操作的⼊⼝。
开始游戏玩家选择开始游戏模式,进⼊游戏后,选择开始游戏,系统根据设置随机⽣成数字,以供玩家点击消除。
消⼦对玩家选中的两张图⽚进⾏判断,判断是否符合消除规则。
只有符合以下规则的图⽚对才能被消除:⼀条直线连通两条直线连通三条直线连通如果可以消除,两个数字变为0。
如果不能消除,则保持原来的游戏地图。
判断胜负当游戏完成后,需要判断游戏胜负。
不同模式下判断胜负的规则不同。
基本模式时,如果在五分钟内将游戏地图的所有图⽚都消除,则提⽰玩家胜利。
休闲模式时,如果游戏地图中所有图⽚都被消除,则提⽰玩家获胜。
提⽰可以提⽰界⾯上能够消除的⼀对图⽚。
计时设定⼀定时间来辅助游戏是否结束。
游戏模式游戏模式有:基本模式、休闲模式和关卡模式三种,可以根据是否定时等规则进⾏设置。
代码#include <stdio.h>#include <stdlib.h>#include <time.h>#define WIDTH 10#define HEIGHT 12int datas[HEIGHT][WIDTH] = {0};int Choose_type ();void Creat_datas (int fol);bool IsHLinked(int x1,int y1,int x2,int y2);bool IsVLinked(int x1,int y1,int x2,int y2);bool IsZeroTurnLinked(int x1,int y1,int x2, int y2); //⼀条线bool IsOneTurnLinked(int x1, int y1, int x2,int y2); //⼆条线bool IsTwoTurnLinked(int x1,int y1,int x2,int y2); //三条线bool Judge_Answer (int x1,int y1,int x2,int y2); //判断是否可消去void Print_datas ();bool Play_Game (int Flo);bool Relax_Play ();//休闲bool Win_Play ();//闯关int main(){int Flo;Flo = Choose_type (); // choose the typeif (Flo == 0) return 0;srand(unsigned(time(NULL)));Creat_datas(Flo); //creat the graphPrint_datas ();bool ov;ov = Play_Game (Flo);if (ov == true){printf ("VICTORY");}else{printf ("FAILED");}return 0;}bool Basic_Play (){long int t1 ,t2 = 0 ;int op = 1;int x1,y1,x2,y2;bool ANS;printf ("五分钟计时开始\n");t1 = clock();while (t2 < 300000 && !Isblank() && op != 0 ){if (op == 1){Print_datas ();printf("请输⼊两者的坐标[x1 y1 x2 y2]:"); //从上到下,从左到右,先⾏后列 scanf("%d %d %d %d",&x1,&y1,&x2,&y2);if (Judge_Answer (x1, y1, x2,y2)){datas[x1][y1] = datas[x2][y2] = 0;Print_datas ();}else{printf("错误");}}if (op == 2){ANS = Help_ans ();Print_datas ();if (ANS == false){printf ("已没有可以消去的\n");return true;}}printf("是否继续游戏 1、YES 0、NO 2、HELP:");scanf ("%d",&op);t2 = clock() - t1;}if (t2 > 299){printf ("超时\n");return false;}if (Isblank()) return true;else return false;}bool Help_ans (){int k;for (int i = 1; i < 11;i++){if (datas[i][j] != 0){k = j+1;for (int m = i; m < 11;m++){for (int n = k; n < 9;n++){if (datas[i][j] == datas[m][n]){if (Judge_Answer(i,j,m,n)){printf ("(%d,%d) (%d,%d)\n",i,j,m,n);datas[i][j] = datas[m][n] = 0;return true;}}}k = 1;}}}}return false;}bool Relax_Play (){int op = 1;int x1,y1,x2,y2;bool ANS;while (!Isblank() && op != 0) //G isn't blank{if (op == 1){Print_datas ();printf("请输⼊两者的坐标[x1 y1 x2 y2]:");scanf("%d %d %d %d",&x1,&y1,&x2,&y2);if (Judge_Answer (x1, y1, x2,y2)){datas[x1][y1] = datas[x2][y2] = 0;Print_datas ();}else{printf("错误");}}if (op == 2){ANS = Help_ans ();Print_datas ();if (ANS == false){printf ("已没有可以消去的\n");return true;}}printf("是否继续游戏 1、YES 0、NO 2、HELP:"); scanf ("%d",&op);}if (!Isblank()) return false;else return true;}bool Win_Play (){int op = 1;int x1,y1,x2,y2;bool ANS;while (!Isblank() && op != 0) //G isn't blank{if (op == 1){Print_datas ();if (Judge_Answer (x1, y1, x2,y2)){datas[x1][y1] = datas[x2][y2] = 0;Print_datas ();}else{printf("错误");}}printf("是否继续游戏 1、YES 0、NO :");scanf ("%d",&op);}if (!Isblank() && Help_ans) return false;elsereturn true ;}bool Isblank (){for(int j=1; j < 10 ; j++){for (int i= 1; i< 8 ; i++){if (datas[j][i] != 0) return false;}}return true;}bool Play_Game (int Flo){bool Ans;if (Flo == 1) //the basic type{printf ("基本模式:\n");Ans = Basic_Play ();return Ans;}if (Flo == 2) //the relax type{printf ("休闲模式:\n");Ans = Relax_Play ();return Ans;}else //the win type{printf ("第%d关游戏:\n",Flo - 2);Ans = Win_Play ();return Ans;}}void Print_datas (){for(int j=1; j < 11 ; j++){printf("\t\t");for (int i= 1; i< 9 ; i++){printf("%d\t",datas[j][i]);}printf("\n");}}bool Judge_Answer (int x1,int y1,int x2,int y2){if (datas [x1][y1] != datas[x2][y2] || datas [x1][y1] == 0 || datas [x2][y2] == 0 ) return false; if (x1 == x2 && y1 == y2) return false;if (x1 > 11 || x2 > 11 || y1> 9 || y2 > 9) return false;if (x1 == x2 || y1 == y2){if (IsZeroTurnLinked(x1,y1,x2,y2) || IsTwoTurnLinked(x1,y1,x2,y2)) return true;}return false;}int Choose_type (){printf("请选择你要进⾏的操作:1,开始游戏 2,结束游戏\n");int op;scanf("%d",&op);if (op == 1){printf("\n请选择游戏模式:1、基本模式 2、休闲模式 3、关卡模式\n"); int ops;scanf ("%d",&ops);if (ops == 1) return 1;if (ops == 2) return 2;if (ops == 3){printf("\n请选择你选择的关卡3-16:");int opsd;scanf ("%d",&opsd);return opsd;}}if (op == 2) return 0;}void Creat_datas (int fol){int tmpDatas[80] = {0}; // 定义⼀个临时数组⽤于存放int PicNum[] = {3,4,5,1,2,7,9,6,8,44,78,12,90,33,34};int Count = 0,i, j, d = 0,Pic,tem,t;Pic = 8 * 10 / (fol + 9 );for(j=0; j < 80 ; j++){tmpDatas[j] = PicNum[d];Count++;if (Count == Pic ){d++;Count = 0;}}d = 80;for(j=1;j < HEIGHT - 1;j++)for (i = 1;i < WIDTH - 1; i++){t = rand() % d; //Fisher-Yates Shuffletem = tmpDatas[t];tmpDatas[t] = tmpDatas[d -1];tmpDatas[d - 1] = tem;datas[j][i] = tmpDatas[d -1];d--;}}bool IsHLinked(int x1,int y1,int x2,int y2) //横向是否连接{int minY,maxY;if (x1 != x2) return false;if (y1 < y2){minY = y1;maxY = y2;}else{minY = y2;maxY = y1;}if (maxY - minY == 1) return true;for ( int i = minY +1; i < maxY ; i++) //从左到右检查中间的点是不是空的 {if (datas[x1][i] != 0) return false;bool IsVLinked(int x1,int y1,int x2,int y2) //纵向是否连接{int minX,maxX;if (y1 != y2) return false;if (x1 < x2){minX = x1;maxX = x2;}else{minX = x2;maxX = x1;}if (maxX - minX == 1) return true;for ( int i = minX +1; i < maxX ; i++){if (datas[i][y1] != 0) return false;}return true;}bool IsZeroTurnLinked(int x1,int y1,int x2, int y2) //不转折时判断{if (IsHLinked(x1, y1, x2,y2)){return true ;}if (IsVLinked(x1, y1, x2, y2)){return true ;}return false;}bool IsOneTurnLinked(int x1, int y1, int x2,int y2) //转折⼀次{int tmpX[2] = { x1, x2 };int tmpY[2] = { y2, y1 };for (int i = 0; i < 2; i++){if (datas[tmpX[i]][tmpY[i]] != 0) continue;if (IsZeroTurnLinked( tmpX[i], tmpY[i], x1, y1) && IsZeroTurnLinked( tmpX[i], tmpY[i], x2,y2)){return true;}}return false;}bool IsTwoTurnLinked(int x1,int y1,int x2,int y2){int j, tmpX1,tmpY1,tmpX2,tmpY2;//纵向遍历所有点tmpX1 = x1;for ( j = 0; j < WIDTH; j++){tmpY1 = j;if (j == y1) continue;if (tmpX1 == x2 && tmpY1 == y2) continue; //重合tmpX2 = x2;tmpY2 = tmpY1;if (datas[tmpX1][tmpY1] != 0 || datas[tmpX2][tmpY2] != 0) continue;if (IsZeroTurnLinked(tmpX1, tmpY1, tmpX2, tmpY2) && IsZeroTurnLinked(tmpX1, tmpY1, x1, y1) && IsZeroTurnLinked(tmpX2, tmpY2, x2, y2)) return true;}//横向遍历所有点tmpY1 = y1;for ( j = 0; j < HEIGHT; j++)if (j == x1) continue;if (tmpY1 == y2 && tmpX1 == x2) continue; //重合tmpY2 = y2;tmpX2 = tmpX1;if (datas[tmpX1][tmpY1] != 0 || datas[tmpX2][tmpY2] != 0) continue;if (IsZeroTurnLinked(tmpX1, tmpY1, tmpX2, tmpY2) && IsZeroTurnLinked(tmpX1, tmpY1, x1, y1) && IsZeroTurnLinked(tmpX2, tmpY2, x2, y2)) {return true;}}return false;}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
连连看游戏设计思想及程序详细讲解(附源码)
连连看游戏设计思想及程序详细讲解(附源码)1、连连的设计思想1)、准备好相应的大小相同的小图片若干public static final int CELL_SIZEx = 36;public static final int CELL_SIZEy = 40;public static final int CELL_COLS = 34;public static final int CELL_ROWS = 14;public static final int CELL_ZONGS = (CELL_COLS-2)*(CELL_ROWS-2);例如本程序:小图片宽:CELL_SIZEx = 36 高:CELL_SIZEy = 40摆放小图片舞台:横向:34格CELL_COLS= 34纵向:14格CELL_ROWS= 14真正要摆放图片的格数:CELL_ZONGS = (CELL_COLS-2)*(CELL_ROWS-2)即:四面的边格不放图片2)、设定34*14个图片数组,其中除四边外,全部随机存入图片,要保证每种图片各数相同(至少不要差太多),并且是偶数(奇数最后消不掉了)。
3)、在舞台上放上鼠标监听器,当点击任一图片时,做出判断,是否第一次点击(点击标记为0就是第一次点击),如果是第一次点击,就将相关信息记录到第一次内容中,比如:x1,y1,cell1,并将点击标记记为1,再次点击后,判断,点的是否同一图片,如果是,不做处理,如果不是,就认为点击了第二个图片,将相关住处记录到第二次内容中,如:x2,y2,cell2。
然后得用这个方法public boolean delkey()判断两点是否可以连通,如果可以,就消掉图片,不可以就不做处理。
整个连连看原理就是这样,其中有几个难点:1、随机图片,并且保证每种图片数相同,并且为偶数。
2、点击监听3、判断两点是否连通,这个算法是整个连连看的核心,也是最难的。
连连看游戏C语言源代码
连连看游戏C语言源代码#include <stdio.h>#include <graphics.h>#include <stdlib.h>#include <math.h>#include <dos.h>#define true 1#define false 0/* ---------------------全局变量------------------------------------ */int BkGndColor=BLACK;int BorderColor=LIGHTGRAY;int LineColor=LIGHTBLUE;/* 消除一对方块时时候的连线颜色*/ /* Pb - ProgressBar */int PbColor=LIGHTGREEN;int PbY=4;int PbHeight=4;int PbValue; /* 进度条百分比,初始值为100.*/ long StartTime; /* 开始时间的秒数,只统计分钟,秒*/ long TotalTime; /* 游戏总共的最大秒数!,*//* BoardDatas: a small-size board *//* Board[x][y][0] - 0:empty, 1:filled *//* Board[x][y][1] - cell's key; */unsigned char Board[10][10][2];int CellSize=30;int BoardX=20;int BoardY=60;int BoardWidth=10;int BoardHeight=10;int CellColor=WHITE;int SelColor=BLUE; /* selCell's border rect color */int CurColor=RED; /* curCell's border rect color */int EraColor=CYAN; /* 用于擦除cell的颜色!*/int PairsCount; /* how much pairs we have put on board *//* 用于存储逻辑坐标(索引)*/typedef struct _tagCELL{char x;char y;} CELL;CELL selCell,curCell;/*缓存前一个被选中的位置以及当前所处位置!*//*Scan Codes Define*/enum KEYCODES{K_ESC =0x011b,K_UP =0x4800, /* upward arrow */K_LEFT =0x4b00,K_DOWN =0x5000,K_RIGHT =0x4d00,K_SPACE =0x3920,K_P =0x1970,K_RETURN =0x1c0d, /* Enter */};/* ---------------------函数列表------------------------------------ */void InitGame(char *bgiPath);void PlayGame();void QuitGame();void InitProgressBar();void UpdateProgressBar(int percent);void DrawCell(int key,int x,int y,int color);void EraseCell(int x,int y);void DrawBorderRect(CELL *c,int color);void DrawGameOver(char* info);int GetKeyCode();int FindPath(CELL *c1,CELL *c2);/*绘制消除方块时候的连接路径!,用指定颜色!*/void DrawPath(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4,int color);/* ----------------------函数实现----------------------------------- *//* ----------------------[ 核心算法]---------------------------------* 先进行水平方向判断,找出两点所在的水平直线活动范围,* 算出这两条线段在垂直方向的共同区域,* 遍历该区域判断能否在两线段间架起公垂线,能则两点连接上;* 接着进行垂直方向判断,类同。
连连看游戏课程设计+源代码
课程设计课程名称:程序设计课程设计课题名称:网络连连看游戏班级:xxx学号:xxx姓名:xxx指导教师:计算机学院一、课程设计目的本课程设计的目的最主要是掌握linux系统下C++编程思想,以及关于QT软件编程,设计出连连看图形界面,实现连连看各项功能,提高编程和解决问题的能力。
二、课程设计内容设计一个连连看游戏项目,实现如下功能:1、设计连连看游戏界面,能让用户在该界面上进行相关操作。
2、为游戏添加功能:聊天对话,逻辑层相消,游戏级别,时间限制等。
三、课程设计要求1、课程设计的程序必须用C++语言完成。
2、课程设计必须在linux系统下进行。
3、要求写出需求分析报告。
分析部分包括功能需求和界面需求。
4、本项目要求分团队完成,连连看游戏五人一组共同合作,培养学生团队合作的能力。
四、系统的需求分析和模块设计1、需求分析本项目需完成两大模块设计:一为游戏界面设计,二为游戏功能设计。
2、模块分解系统功能层次模块图:五、系统的程序设计与实现程序的运行环境:Linux终端开发环境:QT、C++程序的详细设计:连连看消去算法实现在检验两个方块能否消掉的时候,我们要让两个方块同时满足两个条件才行,就是两者配对并且连线成功。
分3种情况:(从下面的这三种情况,我们可以知道,需要三个检测,这三个检测分别检测一条直路经。
这样就会有三条路经。
若这三条路经上都是空按钮,那么就刚好是三种直线(两个转弯点)把两个按钮连接起来了)* 1.相邻* 2. 若不相邻的先在第一个按钮的同行找一个空按钮。
1).找到后看第二个按钮横向到这个空按钮所在的列是否有按钮。
2).没有的话再看第一个按钮到与它同行的那个空按钮之间是否有按钮。
3).没有的话,再从与第一个按钮同行的那个空按钮竖向到与第二个按钮的同行看是否有按钮。
没有的话路经就通了,可以消了.* 3.若2失败后,再在第一个按钮的同列找一个空按钮。
1).找到后看第二个按钮竖向到这个空按钮所在的行是否有按钮2).没有的话,再看第一个按钮到与它同列的那个空按钮之间是否有按钮。
Android连连看源代码
运行出来效果如下:MainActivity:package games.llk;import android.app.Activity;import android.os.Bundle;public class Main extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);//setContentView(yout.main);setContentView(new GameView(this));}}GameView:package games.llk;import java.util.Random;import android.content.Context;import android.content.res.Resources; import android.graphics.Bitmap;import android.graphics.BitmapFactory; import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.Point;import android.graphics.Rect;import android.graphics.Bitmap.Config; import android.os.Handler;import android.view.MotionEvent; import android.view.View;public class GameView extends View {private int m_w;private int m_h;private int top_client;private int right_client;private int bottom_client;private int left_client;private Rect client_r;private Paint p_client_r;private boolean display_moreInfo;private boolean isInited;private Paint p;private Paint p_line;private Paint p_line_2;private Paint p_text;private Paint p_pross_b;private Paint p_pross;private int point_w;private int point_h;private Rect btn_r_1;private Rect btn_r_2;private Rect btn_r_close;private Bitmap bmp_btn;private Rect pross_r;private Rect pross_r_2;private Rect t_r;private Rect t_r_2;private boolean ispause=false;private boolean isstart=false;private String s_pause="暂停中。
课程设计报告Java实现游戏连连看(有源代码)
2.4流程图如下图2 主函数流程图图3 游戏进行流程图图4 使用炸弹流程图图5 计算时间流程图图6 开始游戏后画面用户选择两张一样的图片,通过鼠标进行选取,如果用户两次点击的图片不相同,那么系统认为用户没有点(鼠标记数归0),以完成用户以后的选取工作。
如果用户选择的是相同的图片(如第八行第二列和第八行第三列),那么系统会消除这两张图片,并使鼠标记数为0,并消除这两张图片的标记,使里面的图片被标记在外面。
以便用户可以进行以后的选择。
图7 消除三对后画面用户也可使通过使用“炸弹”功能进行消除图片。
方法是点击菜单中的“炸弹”选项使用,点击后如果界面上有两张可以相连的相同图片就随机消除两张可以相连的相同的图片(如第一行第一列河第一行第四列)。
图8 使用炸弹后画面炸弹数目是有限的,默认数目为三,每使用一次“炸弹”功能,炸弹数目就会自动减一,当炸弹数目为零时(使用三次“炸弹”功能)。
并且用户想再次使用炸弹时,系统会弹出对话框提示用户,并把菜单中“炸弹”选项变为灰色(用户不可使用)。
图9 炸弹使用光后画面当系统开始游戏后,系统会在后台记录时间,如果在用户还没有消除所有图片时,系统时间到了,那么系统会弹出对话框,提示用户,时间到了,游戏失败。
图10 时间到时的画面当用户点击确定后,系统还会弹出对话框询问用户是否重新开始,用户选择“是”时,系统会开始新游戏;当用户选择“否”时,系统会返回开始界面;当用户选择“取消”时,系统会返回提示时间到的界面。
图11 点击确定时的画面如果在时间未到时,用户使所有的图片都消失(两两消除,直到最后一对),系统会提示用户游戏以通过,点“确定”后回到开始界面。
图12 通关画面4.设计体会通过这次课程设计我学到了不少东西,也发现了大量的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
因而,通过课程设计之后,把以前所学过的知识重新温故。
有些在设计过程中已解决,有些还有待今后慢慢学习,只要认真学就会有更多的收获。
VC_实现连连看游戏
的图片, 或者程序判断出无可消的图片时, 可以重新排序, 以 便游戏可以继续进行。
为了游戏的美观, 当点击每个图片时, 应该有类似按钮点 击的效果。 要实现这一点, 最简单的就是把每个图片都做成一 个 按 钮 , 这 可 以 利 用 MFC 的 CButton 类 , 编 写 CLLKanButton 类 , 使 其 继 承 于 Cbutton 类 , 使 每 个 Button 都 有 自 己 的 ID 号 , 用来存储图片类型, 还应该有一个 CPoint 类型的成员变量, 用 来 存 储 每 个 Button 的 位 置 信 息 , 最 后 在 创 建 时 , 将 和 ID 号 对 应的图片贴到相应的位置上即可。
for(j=1; j<=MAXY-2; j++) {
p.x = i; p.y = j; m_btnGroup.Add(new CLLKanButton(map[i][j], p)); } //显 示 按 钮 for(i=0; i<(MAXX-2)*(MAXY-2); i++) { CLLKanButton *btn = (CLLKanButton *)m_btnGroup. GetAt(i); btn->Create(str, WS_CHILD|BS_BITMAP, CRect(130+(i%(MAXY-2))*40, 70+(i/(MAXY-2))*40, 170 +(i% (MAXY -2))*40, 110 +(i/(MAXY -2))*40), this, IDC_BLOCK+i); if(btn->m_id)//如果为 0 则不显示 { str.Format("res\\%d.bmp", btn->m_id); HBITMAP m_fkBmp = (HBITMAP)::LoadImage (AfxGetInstanceHandle(), str, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADFROMFILE); //加 载 图 片 if(m_fkBmp == NULL)
连连看小游戏设计毕业设计
摘要游戏“连连看”,只要将相同花色的两张牌用三根以内的直线连在一起就可以消除,规则简单容易上手。
这个程序的界面使用Jframe框架,主程序窗口包含一个主面板,其中包含两个子面板,左边一层子面板是游戏窗口,符合我们玩游戏的习惯,包含连连看游戏的图片元素,用户进行游戏能找到32对图片;右边一层用来实现游戏控制,有开始、刷新、选择难度、显示分数、进度条等功能选项。
结合Java 编程语言的简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程、动态和连连看游戏的休闲、趣味、益智加上美观的界面设计和秀色可餐的水果蔬菜游戏图片元素,使这款连连看游戏成为现代都市人们打发无聊,放松身心的好帮手。
加入了游戏时间控制和过关控制及进度条提示功能使游戏速度节奏快,画面清晰可爱,老少皆宜。
通过ActionEvent 组件进行动作事件的监听和处理。
游戏通过定义数组,根据一定的算法实现规定的路径判断。
关键字: Java连连看;Jframe;数组;路径判断AbstractThe game "lianliankan", as long as the two cards with the same suit straight up to three connected can be eliminated, rules are easy. This program of interface using Jframe framework, main program window contains a a main panel, which contains two a child Panel, left a layer child Panel is game window, meet we playing game of habits, contains fest see game of pictures element, user for game can found 32 on pictures; right a layer used to achieved game control, has began, and refresh, and select difficulty, and displayed score, and progress article, features option. Combines a simple Java programming language, object-oriented, distributed, interpreted, robust, secure system-independent, portable, high-performance, multithreaded, dynamic and lianliankan games, leisure, fun, puzzle together with attractive interface design and appetizing fruit vegetables picture elements, makes this lianliankan games become the modern city spending tedious, relaxed and good help. Joined the playing time control and border control and progress bar prompts make the game faster tempo, clear picture and lovely, both young and old. Action through the ActionEvent component event listening and handling. Games by defining an array according to certain algorithms provide path of judgment.Key words: Java Lianliankan ; Jframe ; array ; approaches目录1.引言 (1)2.游戏规则 (1)2.1概要 (1)2.2操作 (1)2.3胜利条件 (1)2.4失败条件 (1)3.发展概况 (1)3.1连连看游戏的历史 (1)3.2用java语言写连连看游戏的原因 (2)4.方案论证 (2)4.1设计原理 (2)4.2方案选择 (3)4.3主要问题 (3)4.4技术要求 (3)4.5游戏应用环境的构建 (4)5.系统分析 (4)5.1模块分析 (4)5.1.1 界面的设计和图片的随机生成模块 (5)5.1.2 菜单控制模块 (5)5.1.3算法模块 (5)5.2基本思路 (6)5.2.1 游戏地图设计思路 (6)5.2.2 连连看游戏图片 (6)5.2.3 获取图片位置 (6)5.2.4 路径判断思路 (7)6.系统设计 (8)6.1主界面的设计 (8)6.2图片的随机生成 (9)6.3单击控件的事件触发 (9)6.3.1开始游戏按钮 (9)6.3.2重列按钮 (10)6.3.3难度选择按钮 (10)6.4清除两个一样的符合条件的方块 (10)6.5过关设置 (10)7.结果分析 (11)7.1优点 (11)7.2缺点 (11)8.总结 (11)参考文献 (13)致谢 (14)1.引言网络小游戏、网页游戏越来越受网民欢迎,除了玩的方法简单外(不像其他游戏还需要注册下载繁琐过程),很多游戏不乏经典。
C语言实现连连看
南京航空航天大学计算机专业专业:运算机科学与技术学院姓名:杨万学号:161310224“mymai”文件中代码#include <iostream>using namespace std;#include <stdio.h>#include <fstream>#include <windo>#include <>#include <stdli>#include <strin>#include "lianlianka"int main(){Game mygame;int selection;while(true){mygamenu();cout<<"请输入:"<<endl<<"数字1进入游戏;"<<"数字2继续游戏;"<<"数字3选择游戏难度;"<<"数字4选择游戏模式;"<<"数字5查看排行榜;"<<"数字0退出游戏."<<endl;cin>>selection;if(selection<0||selection>5){cout<<"输入错误"<<endl;system("cls");continue;}DWORD game_start, game_end;switch(selection){case 1:{char myname[20];cout<<"请输入您的用户名(不超过20个字符):"; cin>>myname;mygamme(myname);char ch;bool is_complete = true;DWORD load_start, load_end;load_start = GetTickCount();cout<<"游戏地图加载中,请稍后..................."<<endl;do{mygamMap();load_end = GetTickCount()-load_start;if(load_end > 2000) 简单"<<endl;cout<<"▉ 2. 普通"<<endl;cout<<"▉ 3. 困难"<<endl;do{cout<<"请按相应的数字键选择您需要的游戏难度"<<endl;cin>>difficulty_grade;mygammeDifficuties(difficulty_grade);}while(!(difficulty_grade==1||difficulty_grade==2||difficulty_grade==3)); system("cls");break;}case 4:{int model; 时模式"<<endl;cout<<"▉ 2.无穷时模式"<<endl;do{cout<<"请按相应的数字选择您需要的游戏模式"<<endl;cin>>model;mygammeModel(model);}while(!(model==1||model==2));break;}case 5:{mygamng();break;}case 0:exit(0);}}return 0;}“lianlianka"文件中代码#inclu de <iostream>using namespace std;#include <stdio.h>#include <fstream>#include <windo>#include <>#include <>#include <stdli>#include <strin>#include "lianlianka"/******************************************************************************************** *******//******************************************************************************************** *******//******************************************************************************************** *******/Game::Game() ametime = gametime;strcpy(,name);gamer.model = difficuties/4;saveg((char*)&gamer,sizeof(gamer));saveg();}/******************************************************************************************** *******//******************************************************************************************** *******//******************************************************************************************** *******/void Game::SetName(char *myname){strcpy(name,myname);}/******************************************************************************************** *******//******************************************************************************************** *******//******************************************************************************************** *******/bool Game::IsTEiminate1(int i1,int j1,int i2,int j2){bool flag1 = true; 进入游戏"<<endl;cout<<"●2. 继续游戏"<<endl;cout<<"●3. 设置难度"<<endl;cout<<"●4. 设置模式"<<endl;cout<<"●5. 排行榜"<<endl;cout<<"●0.退出游戏"<<endl;}/******************************************************************************************** *******//******************************************************************************************** *******//******************************************************************************************** *******/void Equal(Gamer &mygamer,Gamer gamertemp){mygamime = gamerime;mygam = gamer;strcpy(mygam,gamer;}void InitGamer(Gamer &mygamer){mygamime = ;mygam = 0;}void SortingGamer(Gamer *gamerarray,int num){Gamer temp;for(int i=0;i<num-1;i++)for(int j=i+1;j<num;j++){if(gamerarray[i].gametime > gamerarray[j].gametime) {Equal(temp,gamerarray[i]);Equal(gamerarray[i],gamerarray[j]);Equal(gamerarray[j],temp);}}}void Game::Ranking(){int k=0;Gamer gamertemp;int i1 = 0;int i2 = 0;int i3 = 0;Gamer esaygame[5];Gamer ordinarygame[5];Gamer difficultgame[5];fstream gamerfile;gamer("gamerinformatio",ios::in|ios::binary);if(!gamerfile){cout<<"打开文件gamerinformation.dat失败"<<endl; return;}while(!gamer()){gamer((char*)&gamertemp,sizeof(Gamer)); if(gamer())break;if(gamer == 1){if(i1<5){Equal(esaygame[i1++],gamertemp);SortingGamer(esaygame,i1);}else{if(gamerime < esaygame[4].gametime) {Equal(esaygame[4],gamertemp);SortingGamer(esaygame,5);}}}if(gamer == 2){if(i2<5){Equal(ordinarygame[i2++],gamertemp);SortingGamer(ordinarygame,i2);}else{if(gamerime < ordinarygame[4].gametime) {Equal(ordinarygame[4],gamertemp);SortingGamer(ordinarygame,5);}}}if(gamer == 3){if(i3<5){Equal(difficultgame[i3++],gamertemp);SortingGamer(difficultgame,i3);}else{if(gamerime < difficultgame[4].gametime) {Equal(difficultgame[4],gamertemp);SortingGamer(difficultgame,5);}}}}gamer();cout<<endl<<"简单模式★:"<<endl;cout<<" 玩家游戏历时(秒) 排名"<<endl<<endl;if(i1 == 0)cout<<endl<<"没有玩家记录,快来创建新记录吧!"<<endl;for(;k<i1;k++){cout<<" "<<esayg ame[k].name<<" "<<esayg ame[k].gamet ime<<" "<<k+1<<endl;}cout<<endl<<"一般模式★★★:"<<endl<<endl;if(i2 == 0)cout<<endl<<"没有玩家记录,快来创建新记录吧!"<<endl;for(;k<i2;k++){cout<<" "<<ordin aryga me[k].name<<" "<<ordin aryga me[k].gamet ime<<" "<<k+1<<endl;}cout<<endl<<"困难模式★★★★★:"<<endl<<endl;if(i3 == 0)cout<<endl<<"没有玩家记录,快来创建新记录吧!"<<endl;for(;k<i3;k++){cout<<" "<<diffi cultg ame[k].name<<" "<<diffi cultg ame[k].gamet ime<<" "<<k+1<<endl;}}”lianlianka"头文件中代码typedef struct gamer{int model; //游戏困难度char name[20]; //游戏者名字double gametime; //游戏时刻}Gamer;class Game{private:int gamemodel; //游戏模式int endtime; //限时模式下游戏的终止时刻char name[21]; //游戏者用户名int score; //游戏得分double gametime; //游戏时刻int difficuties; //游戏难度,那个地址概念了三个难度,简单,一般,困难char gamemap[14][14];public:Game(); //构造函数void BuildMap(); //构造游戏地图void SetName(char *myname); //设置用户姓名bool MapIsRight(); //检查构造的地图是不是正确void Reset(); //切换游戏地图void NewReset();void PaintMap(); //绘制地图void RepaintMap(); //从头绘制地图void SetGameDifficuties(int diff); //设置游戏的难度void SetGameModel(int mymodel); //设置游戏bool LoadMap();//从文件ma中加载地图void SaveMap(char *map); //因为随机产生数组的时间较长,因此选择将产生的地图数组存入文件中,以便下次使用bool IsGEiminate(int i1,int j1,int i2,int j2); //判定是不是可以拐弯排除bool IsVEiminate(int i,int j1,int j2); //是不是能够直线排除bool IsTEiminate2(int j1,int i1,int j2,int i2);//判定是不是可以转折排除(前后通排除)bool IsTEiminate1(int i1,int j1,int i2,int j2); //判定是不是可以转折排除(左右通排除)bool IsEliminate(int i1,int j1,int i2,int j2); //判定是不是成对排除void DoEiminate();//排除操作bool IsComplete(); //是不是完成了所有的排除,假设是是返回true,不然否会falsebool SaveFile();void GameMenu(); //输出游戏菜单void SaveGamer(); //向文件中存储用户完成游戏后的时间和用户名int GetFileMapNum(); //取得文件中地图个数void SetGameTime(double mygametime); //设置用户完成游戏的时间 double GetGameTime(){return gametime;} //获取用户完成游戏的时间 int GetGameEndtime(){return endtime;}int GetGameModel(){return gamemodel;}void Ranking(); //排行榜int GetNoSpaceNum();bool IsGEiminate_sub2(int i1,int j1,int i2,int j2);bool IsGEiminate_sub1(int i1,int j1,int i2,int j2);};。
连连看游戏源代码C#
连连看using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Collections; //ArrayList命名空间namespace 连连看{public partial class Form1 : Form{private Bitmap Source; //所有动物图案的图片private int W = 50; //动物方块图案的宽度private int GameSize=10; //布局大小即行列数private bool Select_first = false; //是否已经选中第一块private int x1, y1; //被选中第一块的地图坐标private int x2, y2; //被选中第二块的地图坐标Point z1, z2; //折点棋盘坐标private int m_nCol = 10;private int m_nRow = 10;private int[] m_map = new int[10*10];private int BLANK_STATE = -1;public enum LinkType {LineType,OneCornerType,TwoCornerType};LinkType LType; //连通方式public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){Source = (Bitmap)Image.FromFile("..\\..\\res\\animal.bmp");this.pictureBox1.Height = W * (m_nRow + 2);this.pictureBox1.Width = W * (m_nCol+2);this.pictureBox1.Top = 0;this.pictureBox1.Left = 0;//当前窗体标题栏高度int d = (this.Height - this.ClientRectangle.Height);this.Height = this.pictureBox1.Height + this.pictureBox1.Top+ d;this.Width = this.pictureBox1.Width + this.pictureBox1.Left ;//for (int i = 0; i < 10 * 10; i++)//{// m_map[i] = i % 6;//}StartNewGame();Init_Graphic();}private void StartNewGame(){//初始化地图,将地图中所有方块区域位置置为空方块状态for(int iNum=0;iNum<(m_nCol*m_nRow);iNum++){m_map[iNum] = BLANK_STA TE;}Random r = new Random();//生成随机地图//将所有的动物物种放进一个临时的地图tmpMap中ArrayList tmpMap=new ArrayList ();for(int i=0;i<(m_nCol*m_nRow)/4;i++)for(int j=0;j<4;j++)tmpMap.Add(i);//每次从上面的临时地图tmpMap中取走(获取后并在临时地图删除) //一个动物放到地图的空方块上for (int i = 0; i < m_nRow * m_nCol; i++){//随机挑选一个位置int nIndex = r.Next() % tmpMap.Count ;//获取该选定物件放到地图的空方块m_map[i]=(int)tmpMap[nIndex];//在临时地图tmpMap除去该动物tmpMap.RemoveAt(nIndex);}}private void Init_Graphic(){Graphics g = get_Graphic(); //生成Graphics对象for (int i = 0; i< 10 * 10; i++){g.DrawImage(create_image(m_map[i]), W * (i % GameSize)+W,W * (i / GameSize)+W, W, W);}}private Graphics get_Graphic(){if (pictureBox1.Image == null){Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);pictureBox1.Image = bmp;}Graphics g = Graphics.FromImage(pictureBox1.Image);return g;}public Graphics GetGraphicsObject(ref PictureBox pic){System.Drawing.Graphics g;Bitmap bmp = new Bitmap(pic.Width, pic.Height);pic.Image = bmp;g = Graphics.FromImage(bmp);return g;}//create_image()方法实现按标号n从所有动物图案的图片中截图。
连连看c语言代码,连连看C语言代码.doc
连连看c语⾔代码,连连看C语⾔代码.doc #include void initialize(); //初始化void near1(int a,int b,int a1,int b1); //算法void print_chess(); //打印棋盘int exit_chess(); //判断是否结束//全局变量char chessman[10][10]; //编译系统初始化每个元素为0void main(){int row,line; //row是⾏号,line是列号int row2,line2; //row是⾏号,line是列号printf("\t\t\t按任意键开始\n");fflush(stdin);getch();initialize(); //初始化棋盘内容do{print_chess();printf("输⼊第⼀个:");fflush(stdin);scanf("%d.%d",&line,&row);printf("输⼊第⼆个:");fflush(stdin);scanf("%d.%d",&line2,&row2);if(chessman[line][row]!=chessman[line2][row2]){printf("两数不相同!\n"); //两数不同}else if(line==line2&&row==row2){printf("错误输⼊\n"); //输⼊相同的坐标,提⽰⽤户错误}else if(line<=line2){near1(line,row,line2,row2); //使⽤函数处理,第⼀个点⼀定在第⼆个点上⽅}else{near1(line2,row2,line,row); //使⽤函数处理}system("pause");}while(exit_chess());system("pause");printf("\n\n\n\t\t恭喜您,您胜利了!\n");printf("\n\t\t制作⼈:蒋睿⽴\n");printf("\n\t博客:http:\\");}void initialize() //初始化棋盘{int i,j; //⽤于循环计数int a[8]={0}; //记录哪些字符出现次数不是偶数srand(time(NULL));for(i=1;i<8;i++) //这⾥只随机前8⾏,留最后⼀⾏不打印for(j=1;j<9;j++){chessman[i][j]=rand()%8+65; //棋盘内容为⼤写字母A到Hif(chessman[i][j]==65) a[0]++; //记录A的个数if(chessman[i][j]==66) a[1]++; //记录B的个数if(chessman[i][j]==67) a[2]++; //记录C的个数if(chessman[i][j]==68) a[3]++; //记录D的个数if(chessman[i][j]==69) a[4]++; //记录E的个数if(chessman[i][j]==70) a[5]++; //记录F的个数if(chessman[i][j]==71) a[6]++; //记录G的个数if(chessman[i][j]==72) a[7]++; //记录H的个数}for(i=0;i<8;i++){if(a[i]%2!=0) //如果字符的个数是奇数就还需要打印⼀个chessman[8][i+1]=i+65;else //如果前⾯7⾏随机的A到H字符恰好是偶数,最后⼀⾏全是I字符chessman[8][i+1]=73;}}void print_chess() //打印棋盘内容{int i,j;system("cls");printf("\t 1 2 3 4 5 6 7 8 \n");for(i=0;i<10;i++){printf("\t\n\t");for(j=0;j<10;j++){printf("%4c",chessman[i][j]);if(j==9&&i!=0&&i!=9)printf("\t%d",i);}}printf("\n\n\n\n");}int exit_chess() //判断是否满⾜退出{int i,j;for(i=0;i<10;i++){for(j=0;j<10;j++)if(chessman[i][j]!=0)return 1; //只要有1个棋⼦不为0,就返回1}return 0;}void near1(int a,int b,int a1,int b1)int arow[2];int aline[2];int brow[2];int bline[2];int start=0,end=0; //临时两个点int i,j,n; //⽤于循环for(i=0;i<2;i++) //初始化数组{arow[i]=a;brow[i]=a1;aline[i]=b;bline[i]=b1;}(a,b) a⾏中有哪些列for(i=a+1;i<10;i++){if(chessman[i][b]==0)arow[1]=i; //arow[1]是A点a⾏向下向量elsebreak;}for(i=a-1;i>=0;i--){if(chessman[i][b]==0) //arow[0]是A点a⾏向上向量arow[0]=i;elsebreak;}(a1,b1) a1⾏中有哪些列for(i=a1+1;i<10;i++){if(chessman[i][b1]==0) //brow[1]是B点a1⾏向下向量brow[1]=i;break;}for(i=a1-1;i>=0;i--){if(chessman[i][b1]==0) //brow[0]是B点a1⾏向上向量{brow[0]=i;}else{break;}}//(a,b) b列中有哪些⾏for(i=b+1;i<10;i++){if(chessman[a][i]==0) //aline[1]是A点b列向右向量{aline[1]=i;}else{break;}}for(i=b-1;i>=0;i--){if(chessman[a][i]==0) //aline[0]是A点b列向左向量{aline[0]=i;}else{break;}}//(a1,b1) b1列中有哪些⾏for(i=b1+1;i<10;i++){if(chessman[a1][i]==0) //bline[1]是B点b1列向右向量{bline[1]=i;}else{break;}}for(i=b1-1;i>=0;i--)if(chessman[a1][i]==0) //bline[0]是B点b1列向左向量{bline[0]=i;}else{break;}}//关键算法////********************************情况⼀·(a,b)·(a1,b1)*********************************//*********************************情况⼆·(a,b)·(a1,b1)**********************************//*考虑上下向量*/if(brow[0]>=arow[0]) //向上⽅向向量 有共同的列向量start=brow[0]; //取⼤的elsestart=arow[0];if(brow[1]<=arow[1]) //向下⽅向向量 有共同的列向量end=brow[1]; //取⼩的elseend=arow[1];for(;start<=end;start++) //列向量上共同点start到end {/** b1要⼤于b,否则就交换如果不交换将使下⾯的循环出错*/if(b0)) //因为b与b1⼤⼩不能确定,所有有2个if chessman[a][b]=chessman[a1][b1]=0;if((n==b1-b)&&(n>0))chessman[a][b]=chessman[a1][b1]=0;}/*考虑左右向量*/if(aline[0]>=bline[0]) //向左的向量 有共同的⾏向量start=aline[0]; //取⼤的elsestart=bline[0];if(aline[1]0) //a1始终⼤于a{chessman[a][b]=chessman[a1][b1]=0;break;}}/********************************************************************************* * 同⾏ 或者 同列 ·(a,b)** · · 或者* (a,b) (a1,b1) ·(a1,b1) **********************************************************************************/ if(a==a1) //同⾏{if((aline[1]>=b1)||(aline[0]<=b1))chessman[a][b]=chessman[a1][b1]=0;}if(b==b1) //同列{if(arow[1]>=a1)chessman[a][b]=chessman[a1][b1]=0;}}。
原生javascript实现连连看游戏
原⽣javascript实现连连看游戏本⽂实例为⼤家分享了js实现连连看游戏的具体代码,供⼤家参考,具体内容如下<!DOCTYPE html><html><head><title>连连看</title><meta charset="gbk"><style type="text/css">body {text-align: center;}.text {text-align: center; margin-top: 60px; color: #fff;}.agin {text-align: center; margin-top: 60px; color: #fff;}#game-box {margin: 60px auto;position: relative;}#game-box img {float: left;width: 59px;height: 59px;border: 1px solid #000000;}#game-box img.hover {border: 1px solid #ffffff;}#game-box img.active {border: 1px solid #7fff00;}#game-box div {background-color: #7fff00;position: absolute;}</style><script type="text/javascript">var byId = function (id) {return document.getElementById(id);}var boxWidth = 61; //格⼦宽度var gameBox;var mapid = 'game-box';//地图 id//22张图⽚var arr = '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'.split(',');var h = 8; //图⽚共8⾏var w = 11; //图⽚共11列var boxsLength = h*w;var boxArr = {}; //map对象var startBox = ''; //开始的格⼦var endBox = ''; //结束的格⼦window.onload = init;//初始化function init() {byId('agin').style.display = 'none';//隐藏再来⼀把按钮boxsLength = h*w;//图⽚⽅框的个数boxArr = {};startBox = '';endBox = '';var str = '';gameBox = byId(mapid);for (var i = 0; i < h; i++) {for (var j = 0; j < w; j++) {str += '<img class="" onclick="choose(this);" id="t' + i + '_l'+ j + '" src="img/blank.gif">'// alert(str);}//id="t0_l0,t0_l1,t0_l2,t0_l3..."}gameBox.innerHTML = str;gameBox.style.width = w * boxWidth + 'px';pushBoxArr();toHTML();}// 随机获取坐标function getPosition() {var t, f;(function () {t = parseInt(Math.random() * h);l = parseInt(Math.random() * w);if (('t' + t + '_l' + l) in boxArr) {arguments.callee();}})();return {t:t, l:l}}// 创建随机坐标的格⼦function CearteBox(name) {var p = getPosition(); = name;//图⽚名this.t = p.t;//⾏this.l = p.l;//列this.position = 't' + p.t + '_l' + p.l;//位置this.love = 0;//这个⽤于特殊,某些图⽚不同也可以连接switch (name) {case '100':case '200':this.love = 1;break;case '300':case '400':case '500':this.love = 2;break;case '600':case '700':this.love = 3;break;case '800':case '900':this.love = 4;break;}}// 产⽣88个格⼦(图⽚框)function pushBoxArr() {var index = 0;var last = arr.length - 1;for (var i=0; i< h;i++) {for (var j=0;j< w;j++) {var a = new CearteBox(arr[index]);//⽤图⽚名创建,每张图⽚四次 boxArr['t' + a.t + '_l' + a.l] = a;//格⼦的位置(也是每张图⽚的id) if (index === last) {index = 0;} else {index += 1;}}}}// 初始化htmlfunction toHTML() {for (var i in boxArr) {//遍历所有图⽚的idbyId(i).src = 'img/' + boxArr[i].name + '.png';}}// choosefunction choose(el) {if (el.src.indexOf('blank') >= 0) {//⿏标点击了空⽩图⽚return false;}else{el.className = 'active';//更改点击图⽚的样式//第⼀次点击或点击了同⼀张图⽚if (startBox == '' || startBox == el.id) {startBox = el.id;} else {//点击了第⼆张图⽚endBox = el.id;test(boxArr[startBox], boxArr[endBox]);}}}// 判断是不是可连接格⼦function test(a, b) {var can = function (a, b) {if ( == ) {//图⽚名相同就可以连接return true;} else {if (a.love != 0 && b.love != 0) {if (a.love == b.love) {return true;} else {return false;}} else {return false;}}}(a, b);//⽴即执⾏if (can) {//可以连接go(a, b);} else {//不能连接byId(startBox).className = '';startBox = endBox;//指向第⼆张图⽚endBox = '';}}// 判断是否连通function go(a, b) {var _ap = a.position, _bp = b.position;var a = a, b = b, temp, isKill = false;// 建⽴四个点,判断是否两两相通var pt1, pt2, pt3, pt4;// 上到下扫描if (isKill == false) {//交换位置if (a.t > b.t) {temp = a;a = b;b = temp;}for (var i = -1, len = h; i <= len; i++) {pt1 = a;pt2 = {t:i, l:a.l};pt3 = {t:i, l:b.l};pt4 = b;if( (!isNull(pt2) && (pt2.t != a.t) ) || ( !isNull(pt3) && (pt3.t != b.t) ) ){ continue;}else if (link4pt(pt1, pt2, pt3, pt4)){isKill = true;kill(a, b);showLine(pt1, pt2, pt3, pt4);break;return;}}}// 左到右扫描if (isKill == false) {//交换位置if (a.l > b.l) {temp = a;a = b;b = temp;}for (var i = -1, len = w; i <= len; i++) {pt1 = a;pt2 = {t:a.t, l:i};pt3 = {t:b.t, l:i};pt4 = b;if( (!isNull(pt2) && (pt2.l != a.l) ) || ( !isNull(pt3) && (pt3.l != b.l) ) ){ continue;}else if (link4pt(pt1, pt2, pt3, pt4)){isKill = true;kill(a, b);showLine(pt1, pt2, pt3, pt4);break;return;}}}//扫描完毕if(isKill == false){endBox = '';byId(_ap).className = '';startBox = _bp;}}//⼲掉格⼦,删除boxArr中相应格⼦function kill(a, b) {boxArr[a.position] = null;boxArr[b.position] = null;boxsLength -= 2;startBox = '';endBox = '';}// 显⽰链接路径function showLine(a, b, c, d) {var line1 =show2pt(a,b);var line2 = show2pt(b,c);var line3 = show2pt(c,d);var hideLine = function () {gameBox.removeChild(line1);gameBox.removeChild(line2);gameBox.removeChild(line3);byId(a.position).src = byId(d.position).src ='img/blank.gif';byId(a.position).className = byId(d.position).className = '';if (boxsLength<=0) {alert('亲,你赢了!好腻害啊。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要:近年来,Java作为一种新的编程语言,以其简单性、可移植性和平台无关性等优点,得到了广泛地应用,特别是Java与万维网的完美结合,使其成为网络编程和嵌入式编程领域的首选编程语言。
Java语言的学习热潮并没有因为时间的推移而消退,相反,由于计算机技术的发展所带来的新应用的出现,Java越来越流行,这种情况是以往程序设计语言在其生存周期内所不多见的。
Java语言之所以这样长盛不衰,一是因为其众多的技术特点与现今的应用十分合拍,可以覆盖大部分的需求;二是因为SUN公司不断推出新的版本,完善Java自身的功能。
有了这两点,Java语言成为程序员首选的程序设计开发工具就在情理之中了.连连看来源于街机游戏《四川麻将》和《中国龙》,是给一堆图案中的相同图案进行配对的简单游戏,在2003年,一个叫做朱俊的网友将这种形式搬到了PC上,立刻成为办公一族的新宠,并迅速传遍了世界各地。
饱受工作压力的人们没有太多的时间进行复杂的游戏,而对于这种动动鼠标就能过关的游戏情有独钟。
之后村子的连连看风靡版,阿达的连连看奥运版,连连看反恐版,还有敏敏连连看,水晶连连看等遍地开花,造就了一个连连看的新世界。
连连看游戏有多种地图样式和道具系统、大大加强了游戏的可玩性,是一款老少皆宜的休闲佳品。
关键字:发展,java,连连看,程序设计;1.课程设计介绍课题设计的目的:1) 进一步加深对Java语言的理解和掌握;将所学的JAVA知识运用于实践中。
2) 课程设计将理论与实践相结合,提供了一个既动手又动脑,独立实践的机会,锻炼我们的分析解决;实际问题的能力,提高学生适应实际,实践编程的能力。
3)熟练掌握JAVA语言中图形用户界面程序的编写;4)大体了解怎样用JAVA来编写小游戏的,增强我们实践能力和创新精神的综合培养。
课程设计的要求:由于Java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。
面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承学会java程序开发的环境搭建与配置,并在实际运用中学习和掌握Java程序开发的全过程。
进一步熟悉掌握Java程序设计语言的基础内容,如用户图形界面设计、Java多线程编程、Applet程序的设计、文件和网络输入输出流编程、Java数据库编程等。
通过亲自动手写程序,一方面拓展知识面,一方面锻炼调试能力。
第一章系统设计1.1 需求分析该系统通过运用java的相关知识GUI来做界面设计,将Netbean作为辅助软件,进一步完善系统程序。
是图形化的游戏连连看界面更加美观,不至于过于单调乏味,无形中增加了游戏的观赏性,使这款小游戏给用户带来的舒适度大增。
1.2 总体设计开始初始化设置开始界面画表格初始化数值游戏NO游戏是否结束Yes显示游戏结束画面结束1.3 功能设计每次用户选择两个数字块,如果数字块满足一定条件(两个数字块的数字一样,且这两个数字块之间存在转弯少于3的路径),则两个数字块都能消掉。
给定任意具有相同数字的两个数字块,我们需要寻找这两个块之间在转弯最少的情况下,经过数字数目最少的路径。
如果这个最优路径的转弯数目少于3 ,则这两个数字块可以消去。
通过本游戏的开发,达到学习Java技术和熟悉软件开发流程的目的。
这个游戏是用图形界面实现的,通过编译解释后,出现一个图开界面。
界面是由若干个小方格组成的,每一个小方格里有一个数值,如果在一个边上有相同的数值,连续点击它们就会消失,同时界面上正上方的分数就会自动加分。
游戏还设有退出、重列、再来一局的功能,方便游戏操作。
第二章系统各功能模块设计该系统分为三个模块:1、再来一局游戏通过找寻数字相同的数据块来取得分数每次玩完一局时点击再来一局,游戏就会将每一局的得分累加在一起得到最终分数。
2、重列游戏玩到一定程度时可能找不到数字相同的数字块,因此需要重新排列数据块,这是该游戏的复杂度减小,最终达到娱乐的目的。
3、退出点击此按钮退出游戏。
第三章界面设计该游戏采用GUI来设计界面,程序设计了窗体,在窗体上添加面板,面板上添加按钮,可避勉后一按钮覆盖前一按钮的情况发生。
下面是该游戏的一些相关图:3-1 游戏开始3-2 游戏进行中图示3-3 继续下一局第四章课程设计总结和体会通过这次课程设计还使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,并且还发现了自己的许多不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
但通过这次课程设计之后,一定把以前所学过的知识重新温故。
我完成了这次JAVA课程设计,不过这只是我学习路上的驿站。
我相信我在未来的学习中会记住从本次课程设计中所学到的东西,并将它用到未来的学习中去。
在这里谢谢老师的指导,我会更加努力的学习java。
第五章致谢经过为期一周的java课程设计,我学会了很多关于java的相关知识,巩固了所学的知识,同时加深了对这门课的认识,尤其是在刘老师的帮助下取得了很大的进步。
所以在此表示对老师深深地谢意!参考文献:[1] 刘光明.企业文化与核心竞争力[J] .经济管理, 2002, (17).[2] Cochran J K,Qual B K P.A Microcomputer System for Qualitativfe Simulation[J]. Simulation,1990,58(11)[3] 张刚.企业组织创新研究[M] .北京:科学出版社,2000[4] 张庆生.地质力学系统理论[D] .武汉:中国地质大学,2001.[5] 刘宪恩.形成学校文化的基本源点[N] .光明日报,2002-3-12(B1).附录:import javax.swing.*;import java.awt.*;import java.awt.event.*;public class lianliankan implements ActionListener{ JFrame mainFrame; //主面板Container thisContainer;JPanel centerPanel,southPanel,northPanel; //子面板JButton diamondsButton[][] = new JButton[6][5];//游戏按钮数组JButton exitButton,resetButton,newlyButton; //退出,重列,重新开始按钮JLabel fractionLable=new JLabel("0"); //分数标签JButton firstButton,secondButton; //分别记录两次被选中的按钮int grid[][] = new int[8][7];//储存游戏按钮位置static boolean pressInformation=false; //判断是否有按钮被选中int x0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV; //游戏按钮的位置坐标int i,j,k,n;//消除方法控制public void init(){mainFrame=new JFrame("JKJ连连看");thisContainer = mainFrame.getContentPane();thisContainer.setLayout(new BorderLayout());centerPanel=new JPanel();southPanel=new JPanel();northPanel=new JPanel();thisContainer.add(centerPanel,"Center");thisContainer.add(southPanel,"South");thisContainer.add(northPanel,"North");centerPanel.setLayout(new GridLayout(6,5));for(int cols = 0;cols < 6;cols++){for(int rows = 0;rows < 5;rows++ ){diamondsButton[cols][rows]=new JButton(String.valueOf(grid[cols+1][rows+1])); diamondsButton[cols][rows].addActionListener(this);centerPanel.add(diamondsButton[cols][rows]); } }exitButton=new JButton("退出");exitButton.addActionListener(this);resetButton=new JButton("重列");resetButton.addActionListener(this);newlyButton=new JButton("再来一局");newlyButton.addActionListener(this);southPanel.add(exitButton);southPanel.add(resetButton);southPanel.add(newlyButton);fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText()))); northPanel.add(fractionLable);mainFrame.setBounds(280,100,500,450);mainFrame.setVisible(true); }public void randomBuild() {int randoms,cols,rows;for(int twins=1;twins<=15;twins++) {randoms=(int)(Math.random()*25+1);for(int alike=1;alike<=2;alike++) {cols=(int)(Math.random()*6+1);rows=(int)(Math.random()*5+1);while(grid[cols][rows]!=0) {cols=(int)(Math.random()*6+1);rows=(int)(Math.random()*5+1); }this.grid[cols][rows]=randoms; } } }public void fraction(){fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText())+100)); } public void reload() {int save[] = new int[30];int n=0,cols,rows;int grid[][]= new int[8][7];for(int i=0;i<=6;i++) {for(int j=0;j<=5;j++) {if(this.grid[i][j]!=0) {save[n]=this.grid[i][j];n++; } } }n=n-1;this.grid=grid;while(n>=0) {cols=(int)(Math.random()*6+1);rows=(int)(Math.random()*5+1);while(grid[cols][rows]!=0) {cols=(int)(Math.random()*6+1);rows=(int)(Math.random()*5+1); }this.grid[cols][rows]=save[n];n--; }mainFrame.setVisible(false);pressInformation=false; //这里一定要将按钮点击信息归为初始init();for(int i = 0;i < 6;i++){for(int j = 0;j < 5;j++ ){if(grid[i+1][j+1]==0)diamondsButton[i][j].setVisible(false); } } }public void estimateEven(int placeX,int placeY,JButton bz) {if(pressInformation==false) {x=placeX; y=placeY;secondMsg=grid[x][y];secondButton=bz;pressInformation=true; }else { x0=x; y0=y;fristMsg=secondMsg;firstButton=secondButton;x=placeX; y=placeY;secondMsg=grid[x][y];secondButton=bz;if(fristMsg==secondMsg && secondButton!=firstButton){xiao(); } } }public void xiao() { //相同的情况下能不能消去。