制作单机俄罗斯游戏心得(三)
到目前为止,Piece对象也创建好了,所以“物资”齐全,该准备登上游戏的舞台———MainFrame中了,要想让物快在舞台上表演,得有”演员“在”舞台"上啊.所以,在MainFrame中提供了表示当前正在运动的Piece对象的引用currentPiece和下一个方块的引用nextPiece
private Piece currentPiece;
private Piece nextPiece;
注意了当前大方块的运动是在GamePanel中运行的,(需要提出的是,游戏界面包括两个部分,一是方块的堆积界面GamePanel,一是工具界面。整个游戏界面用GameFrame来类实现),在MainFrame中提供了gamePanel(private GamePanel gamePanel;)
在继承JPanel中的GamePanel类中提供了实现了paint方法,把当前的大方块画到界面上。但是怎么在游戏界面MainFrame里得到当前运动的大方块呢?方法就是在GamePanel里提供一个MainFrame的引用mainFrame,(MainFrame mainFrame;),
并提供一个构造器来初始化mainFrame。
public GamePanel(MainFrame mainFrame) {
this.mainFrame = mainFrame;
}
为MainFrame类提供了一个获得当前下降大方块的方法
public Piece getCurrentPiece(){
return this.currentPiece;
}
public void paint(Graphics g) {
//画背景
g.drawImage(this.background,0, 0,
this.getWidth(),this.getHeight(),null);
//画当前运动的方块
/**
* 由于方块是在游戏界面gamepanel里动的,所以在这里定义了话piece的方法
*/
Piece currentPiece = this.mainFrame.getCurrentPiece();
ImageUtil.paintPiece(g, currentPiece);
}
在这里我们将GamePanel看做是一个二维数组,每一个Square都是二维数组的一个元素,然后再paint中将这些小方块画到GamePanel中。当大方块进行下降的时候,GamePanel中就根据这个二维数组进行重画。注意二维数组中的Square元素是只含有位置而不含有图片的Square对象,为此需要在Square类里提供一个构造器
/*
* 初始化方块的位置和图片。用来作为gamePanel存放有图片的square二维数组的元素
*/
public Square(int beginX, int beginY) {
this.image = image;
this.beginX = beginX;
this.beginY = beginY;
}
当一个Piece对象完成下降时,我们需要将这个Piece里面有的带有图片的Square记录到MainFrame中。没完成一个下降就把Square加入二维数组中。下面是初始化界面的二维数组
/**
* 游戏的界面看做是个二维数组组成的平面
* 当一个piece对象完成下降是,需要将这个piece里面所有的square对象添加到mainframe中
* 也就是gamePanel中。在mainframe类里提供一个二维数组来存放一个square对象
* 每个完成下降的piece都将自己所有的square对象存放到一个二维数组中
* 注意只是初始化这个二维数组,绘制二维数组在gamePanel里绘制
*/
private void initSquares() {
int xSize = this.gamePanel.getWidth()/Piece.SQUARE_BORDER;
int ySize = this.gamePanel.getHeight()/Piece.SQUARE_BORDER;
this.squares = new Square[xSize][ySize];
for(int i = 0; i < this.squares.length; i++) {
for (int j = 0; j < this.squares[i].length; j++) {
this.squares[i][j] = new Square(Piece.SQUARE_BORDER * i,
Piece.SQUARE_BORDER * j);
}
}
}
此方法在ManFrame里调用,以便在运行程序时就可以将二维数组初始化,然后再GamePanel里画出来。在这里MainFrame类里又提供了
private Square[][] squares;和
//得到游戏gamepanel的二维数组
public Square[][] getSquares() {
// TODO Auto-generated method stub
return this.square
}
这样在GamePanel类里就可以画好在GamePanel界面了(在paint里画)代码如下
public void paint(Graphics g) {
//画背景
g.drawImage(this.background,0, 0,
this.getWidth(),this.getHeight(),null);
//画当前运动的方块
/**
* 由于方块是在游戏界面gamepanel里动的,所以在这里定义了话piece的方法
*/
Piece currentPiece = this.mainFrame.getCurrentPiece();
ImageUtil.paintPiece(g, currentPiece);
//
Square[][] squares = this.mainFrame.getSquares();
if(squares == null) return ;
//绘制用来存放二维数组的代码,
for(int i=0;i<squares.length;i++) {
for(int j=0;j<squares[i].length;j++) {
Square s = squares[i][j];
if( s!=null) {
g.drawImage(s.getImage(), s.getBeginX(), s.getBeginY(),this);
/*
* g.drawImage(null, s.getBeginX(), s.getBeginY(),this);
* 二维数组代码是用来存放带有图片的square的,可以发现把s.getImage()改成null
* 也可以,因为本身画二维数组的square就没有图片
*/
}
}
}
到此位置就完成了GamePanel的设计其完整的类如下
public class GamePanel extends JPanel {
MainFrame mainFrame;
/**
* 得到背景图卡
*/
private Image background =
ImageUtil.getImage("images/background.jpg");
public GamePanel(MainFrame mainFrame) {
this.mainFrame = mainFrame;
}
public void paint(Graphics g) {
//画背景
g.drawImage(this.background,0, 0,
this.getWidth(),this.getHeight(),null);
//画当前运动的方块
/**
* 由于方块是在游戏界面gamepanel里动的,所以在这里定义了话piece的方法
*/
Piece currentPiece = this.mainFrame.getCurrentPiece();
ImageUtil.paintPiece(g, currentPiece);
//
Square[][] squares = this.mainFrame.getSquares();
if(squares == null) return ;
//绘制用来存放二维数组的代码,
for(int i=0;i<squares.length;i++) {
for(int j=0;j<squares[i].length;j++) {
Square s = squares[i][j];
if( s!=null) {
g.drawImage(s.getImage(), s.getBeginX(), s.getBeginY(),this);
/*
* g.drawImage(null, s.getBeginX(), s.getBeginY(),this);
* 二维数组代码是用来存放带有图片的square的,可以发现把s.getImage()改成null
* 也可以,因为本身画二维数组的square就没有图片
*/
}
}
}
}
}
制作单机俄罗斯游戏心得(三)相关推荐
- cocos2dx 制作单机麻将(三)
cocos2dx 制作单机麻将(三) 麻将逻辑4.得到手牌数据 我们已经保存了一个一维数组, 类似于一个表格,统计出所有牌对应的数量, 但我们怎样得到当前手中是什么牌呢 //扑克转换 BYTE Swi ...
- 计算机ppt制作培训心得体会,制作ppt学习心得体会.doc
制作ppt学习心得体会 现在多采用多媒体教学,在这样特殊的教学模式下,很多时候,我们老师都碍于自己的课件做得不好,而出钱请别人为我们制作.下面是pincai整理的制作ppt学习心得体会,欢迎大家阅读! ...
- 计算机ppt培训心得体会,制作ppt学习心得体会
<制作ppt学习心得体会.doc>由会员分享,可免费在线阅读全文,更多与<制作ppt学习心得体会>相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索. 1 ...
- java单机麻将_cocos2dx 制作单机麻将(五)
cocos2dx 制作单机麻将(五) 麻将逻辑6 最基础的4人麻将逻辑(轮流循环出牌, 之前学的都能用上 跑起来了!!!) 最基础的麻将逻辑 依据自己须要 设置麻将人数GAME_PLAYER 基本流 ...
- 计算机ppt培训心得体会,课件制作的培训心得体会
课件制作的培训心得体会 导语:在利用刻衣制作笔袋的过程中,让我感触颇深,也让我体会到许多动手的乐趣,将自己的想法付诸于实践.以下是小编为大家整理分享的课件制作的培训心得体会,欢迎阅读参考. 课件制作的 ...
- cocos2dx 制作单机麻将(五)
cocos2dx 制作单机麻将(五) 麻将逻辑6 最基础的4人麻将逻辑(轮流循环出牌, 之前学的都能用上 跑起来了!!!) 最基础的麻将逻辑 根据自己需要 设置麻将人数GAME_PLAYER 基本流 ...
- cocos2dx 制作单机麻将(二)
cocos2dx 制作单机麻将(二) 打乱麻将顺序2 前面解说了怎样打乱初始给定的麻将牌堆, 另一种是打乱随意给定的麻将牌堆 //混乱扑克2 void RandAppointCardData(BYTE ...
- linux下打包deb文件,制作deb包的三种方法
制作deb包的三种方法 发布时间:2008-06-10 16:05:39来源:红联作者:Mhynan 我所知道的制作deb包有三种方法,一种是将现有的文件打包,安装该包就像将打包的文件释放到某个目录: ...
- BT源代码学习心得(三):种子文件的编码方式 -- 转贴自wolfenstein (NeverSayNever)
BT源代码学习心得(三):种子文件的编码方式 author: wolfenstein BT的作者使用了一种比较简单易懂的编码方式来对设计种子文件.这种编码方式能够很简单得对python中的各种数据类型 ...
- 我的世界制作服务器地图,我的世界1.7地图制作必看心得 教你怎么做地图
来源:游戏园日期:2019-06-26 04:04:14 我的世界1.7地图制作必看心得 教你怎么做地图.下面的就是有关1.7版本的地图制作心得了,下面的内容可以说是地图制作者的福利攻略哦!那喜欢自己 ...
最新文章
- 建立循环单链表(头插法)
- Windows自带Android模拟器启动失败
- 端口如何支持非localhost访问_Spring Boot 教程:CORS 支持
- python课程将主要介绍哪些内容-Python窗口的基本介绍
- c++11 多线程传参和生产者消费者实现
- PE文件格式(加密与解密3)(一)
- java的URLEncoder.encode() 疑问与解惑
- 17.vue移动端项目二
- lombok构造方法_最佳实践Lombok
- 移动端click事件延迟300ms到底是怎么回事,该如何解决?
- 【目标定位】基于matlab UWB卡尔曼滤波追踪无线时钟同步误差【含Matlab源码 1626期】
- 处理非window设置为window的Owner
- 《深入浅出MFC》读书笔记
- 【爱思考】CISP考试基本介绍
- 织梦dedecms蓝色大学院校学校网站模板(自适应手机移动端)
- 搬砖之余干什么?推荐这几个优质公众号
- choco 使用详解
- php is_subclass_of,PHP is_subclass_of() 函数用法及示例
- 店盈通电商:拼多多发货地址不一样有关系吗?
- 查询你的手机或者邮箱注册过那些网站
热门文章
- php中is upload,PHP中,文件上传
- canvas需要gpu_提高HTML5 canvas性能的几种方法(转)
- 基于深度学习的单目图像深度估计
- 实操教程|称霸Kaggle的十大深度学习技巧
- 基于先验LiDAR点云地图的单目VIO定位
- [pl-slam] 几个重要的参数属性
- Android IntentService的使用和源代码分析
- 20155202 《Java程序设计》实验二(面向对象程序设计)实验报告
- JS实现图片无缝滚动特效;附addEventListener()方法、offsetLeft和offsetWidth属性。
- android夸项目调用