在介绍游戏界面对象如何创建之前,首行得介绍一个我抽象的这个对象的类结构和实现情况:
3 }7 P9 Z# h6 r6 T6 ~) s /*; d$ W! m \9 ~
* 抽象连连看当中的+ q, s4 c: O0 n, ^3 I$ x2 h
* 所要连的对象5 `$ C9 f3 | o8 @
* */
5 Q6 [1 d- S( [/ m import java.awt.*;0 v6 C7 \, {/ \6 K& L
public class ImageShow: b, W8 [ o2 [; y7 k6 B5 b% x
{7 h6 L4 D# @! m
private static Toolkit tk=Toolkit.getDefaultToolkit(); //工具对象
6 k/ u0 D1 z$ G: G, r+ a4 m private Image image; //连连对象上的显示的图像对象" A: s# [9 C6 ]" u, I
public int x; //坐标X的位置
$ f2 ?0 R7 k5 y) X! C6 f public int y; //坐标Y的位置
1 y% \) t; H0 H1 P1 L7 Q public int imagecount; //图像编制的序列引用
2 ]+ w6 P, h( j public boolean bmobang=false;
/ h2 H" W4 A1 y1 Y0 m3 N /*
6 I$ ]* k: O( p4 W * 构造一个连连对象" r- E/ P& \. R4 h8 ]
* */6 `- Z+ b. r$ G: g
public ImageShow(int x,int y,int imagecount)
V6 s0 F1 S2 T2 S: W {
; O+ ?. B5 W( S+ q this.x=x;5 G7 C4 M V' C8 B
this.y=y;# {/ [: L: B$ v/ o
this.imagecount=imagecount;
6 T$ L: A$ u0 C$ L image=tk.getImage(ImageShow.class.getClassLoader()。getResource("image““"+imagecount+".gif"));
- _6 z W0 k1 t1 p+ @; U; j+ e }$ _/ h4 K- O2 r/ {
/*
: y- S' o; ]2 Q1 I * 用于在屏幕上画出此对象
* n2 c- R4 G' D' q% m* i6 `4 n * */
# `! m5 M4 s3 E" u; L2 P: c+ { public void draw(Graphics g)
, O3 b& n9 K5 }4 ? {* @3 N( ] }0 ^# R5 ^- d
g.drawImage(image,x,y, 50, 50,null);
9 s# Z: q7 `# j( ~ g.draw3DRect(x, y, 50, 50, true);: f! M9 |# q W7 b6 @; m
}) F2 p& z! U) j3 w! y. A# E
}
- d* ^8 I' B$ M" f! v' X+ k 这个对象的类结构和实现看起来是很简单,但是这个类在整个游戏当中是非常重要的,几乎可以说整个游戏是围绕着这个对象在展开的。
' W' y; b) V3 P! u6 o7 v! P 下面来看对象的创建方式:, }& r2 e- G! F6 t/ N
本连连看游戏,没有固定的对象排列方式,每一次游戏开始都是随机产生的,此随机产生,也不会影响到游戏的可玩性的。* O' g7 Y& e. O4 _: s+ n% m
算法和实现方法如下:
, Y! Z; ]1 F2 K1 k& J& Q6 Z 本游戏总共有30种不同的图片可供随机产生,但是第一关只能是从前十张图片当中抽取,游戏总共有十关,然后的每一关都是以两张图片在递增,从而实现了每一关图片种数在增加。* n$ @9 Q( e- P' Y. b
本游戏创建游戏对象的对数方法,每一关都是创建以20对对象为基础,然后再加上关数乘以3,从而实现了每一关上的对象对数都不同。3 L* m/ M5 Z0 ^0 T' U6 }
说到底,要想对象随机的出现在屏幕上,而且没有重叠对象的情况,所有出现的对象则完全是可以被连的,也就是说不可能出现倚数的情况,不可能出现最后没有成对匹配的情况,是一个相当复杂的工作,还要为后面的连连看算法设计出应用的需要。
% d5 R# _2 y3 Y% n( s# a 我采用的方式是将屏幕划分成一个矩正的形式,第一个对象正好占住一个矩正当中的位置,也就很好的定位好了对象,设计矩正之前首先确定好游戏对象的大小,3 s' o" a' n) p* j# k. E' y
我将对象的大小设置成宽50,高50的正方形体,那么就可以将游戏屏幕划分成以宽为50,高为50的矩正排列形式,从起始位置开始,将每一个矩正的x,y信息保存在一个集合当中,为创建对象使用,当随机创建一个对象,也必须从矩正集合当中选取一个矩正X,Y轴信息,作为此创建对象的X,Y轴的属性,然后就将此矩正的信息从矩正集合当中删除掉,那么创建下一个对象时就不会有重叠的现象。, W" p' c% ^- k# ]0 w. s
代码实现如下:
$ n5 D% Z! c/ b- B5 q. z( V 创建矩正信息:
4 U9 ~6 i) e/ E5 _; V, f /*
; a8 [/ u3 O5 l6 v* Q! P0 ? * 创建游戏场景X,Y轴的矩正序列
0 m. K1 m- N% a1 K * */
, x) w* U8 E$ Q; s6 X public void addItxy()
2 K# i3 {; ?; Y- |7 d {
: B: N4 N, x. I: u2 O for(int i=100;i |