a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 98|回复: 0

[JAVA] JAVA版连连看界面对象创建算法研究

[复制链接]
发表于 2012-7-31 22:04:26 | 显示全部楼层 |阅读模式
在介绍游戏界面对象如何创建之前,首行得介绍一个我抽象的这个对象的类结构和实现情况:
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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-3 07:36 , Processed in 0.429788 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表