广工JAVA公选课课程报告.docx
- 文档编号:25094683
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:25
- 大小:79.10KB
广工JAVA公选课课程报告.docx
《广工JAVA公选课课程报告.docx》由会员分享,可在线阅读,更多相关《广工JAVA公选课课程报告.docx(25页珍藏版)》请在冰豆网上搜索。
广工JAVA公选课课程报告
JAVA面向对象程序设计课程报告
学院
专业
年级班别
学号
学生姓名
2015年月日
俄罗斯方块的实现
classCell{//定义属性
privateintrow;//行
privateintcol;//列
privateImageimage;//格子的贴图
publicCell(){
}
publicCell(introw,intcol,Imageimage){//构造器
super();
this.row=row;
this.col=col;
this.image=image;
}
publicintgetRow(){
returnrow;
}
publicvoidsetRow(introw){
this.row=row;
}
publicintgetCol(){
returncol;
}
publicvoidsetCol(intcol){
this.col=col;
}
publicImagegetImage(){
returnimage;
}
publicvoidsetImage(Imageimage){
this.image=image;
}
publicvoidmoveRight(){
col++;
}
publicvoidmoveLeft(){
col--;
}
publicvoidmoveDown(){
row++;
}
publicStringtoString(){
returnthis.row+","+this.col;
}
}
package tes;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.util.Arrays;
import java.util.Timer;
import java.util.TimerTask;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* 俄罗斯方块类
*/
public class Tetris extends JPanel {//让Tetris继承JPanel
private int score;//分数
private int lines;//行数
private Cell[][] wall;//墙
private Tetromino tetromino;//下落的方块
private Tetromino nextOne;//下一个方块
private static BufferedImage background;
private static BufferedImage overImage;
public static BufferedImage T;
public static BufferedImage I;
public static BufferedImage J;
public static BufferedImage L;
public static BufferedImage S;
public static BufferedImage Z;
public static BufferedImage O;
public static final int ROWS = 20;//初始化行
public static final int COLS = 10;//初始化列
public static final int CELL_SIZE = 32;//格子尺寸
private Timer timer;//定时器
private boolean pause;//暂停
private boolean gameOver;//结束
private long interval = 600l;//间隔时间
public static final int FONT_COLOR = 0x667799;//字体颜色
public static final int FONT_SIZE = 30;//字体大小
//使用静态代码块加载静态的图片
static {
try {
background = ImageIO.read(Tetris.class.getResource("ttetris.png"));
overImage = ImageIO.read(Tetris.class.getResource("GAMEOVER.png"));
T = ImageIO.read(Tetris.class.getResource("tT.png"));
I = ImageIO.read(Tetris.class.getResource("II.png"));
S = ImageIO.read(Tetris.class.getResource("SS.png"));
Z = ImageIO.read(Tetris.class.getResource("ZZ.png"));
J = ImageIO.read(Tetris.class.getResource("JJ.png"));
L = ImageIO.read(Tetris.class.getResource("LL.png"));
O = ImageIO.read(Tetris.class.getResource("OO.png"));
}catch(Exception e) {
e.printStackTrace();
}
}
//重写父类JPanel方法,重写paint()修改原有绘制方法
public void paint(Graphics g) {
//画背景
g.drawImage(background,9,9,null); //平移坐标系
g.translate(15,15); //画墙
paintWall(g); //画下落的方块
paintTetromino(g); //画下一个方块
paintNextOne(g); //画分数
paintScore(g);
if(gameOver) {
g.drawImage(overImage,0,0,null);
}
}
//画分数
private void paintScore(Graphics g) {
int x = 390;//
基线位置
int y = 190;//基线位置
g.setColor(new Color(FONT_COLOR));//颜色
Font font = g.getFont();//取得g当前字体
font = new Font(font.getName(),font.getStyle(),FONT_SIZE);//设置字体
g.setFont(font);//更改g当前字体
String str = "SCORE:
"+score;
g.drawString(str, x, y); //画行数
y += 80;
str="LINES:
:
"+lines;
g.drawString(str, x, y);
//画提示
y += 80;
str = "[P]Pause";
if(pause) {
str = "[C]Contine";
}
if(gameOver) {
str = "[S]Strat";
}
g.drawString(str, x, y);
}
//画下一个方块
private void paintNextOne(Graphics g) {
if(nextOne==null) {//如果没有正在下落的方块,结束
return;
}
//将每个格子的row,col换算成x,y然后贴图
Cell[] cells = nextOne.cells;
for(int i=0; i Cell cell = cells[i];//cell每一个格子 int x = (cell.getCol()+10)*CELL_SIZE;//向右移动10的位置 int y = (cell.getRow()+1)*CELL_SIZE;//向下移动1的位置 g.drawImage(cell.getImage(),x-1,y-1,null);//贴图 } } //画下落的方块 private void paintTetromino(Graphics g) { if(tetromino==null) {//如果没有正在下落的方块,结束 return; } //将每个格子的row,col换算成x,y然后贴图 Cell[] cells = tetromino.cells; for(int i=0; i Cell cell = cells[i];//cell每一个格子 int x = cell.getCol()*CELL_SIZE;//计算长度 int y = cell.getRow()*CELL_SIZE;//计算长度 g.drawImage(cell.getImage(),x-1,y-1,null);//贴图 } } //画墙 private void paintWall(Graphics g) { for(int row=0; row Cell[]line=wall[row];//line代表墙上的每一行 for(int col=0; col Cell cell = line[col];//cell代表墙上的每个格子 int x = col*CELL_SIZE;//计算长度 int y = row*CELL_SIZE;//计算长度 if(cell==null) { g.drawRect(x, y, CELL_SIZE, CELL_SIZE);//没格子画框 }else { g.drawImage(cell.getImage(),x-1,y-1,null);//有格子贴图 } } } } //添加启动方法 public void action() { wall = new Cell[ROWS][COLS]; //启动 startAction(); //处理键盘按下事件 KeyAdapter l = new KeyAdapter(){ //key 按键 Pressed 按下了 public void keyPressed(KeyEvent e) { int key = e.getKeyCode(); if(key==KeyEvent.VK_Q) {//如果按Q System.exit(0);//结束Java进程 } if(gameOver) {//如果游戏结束 if(key==KeyEvent.VK_S) {//如果按S startAction();//重新开始 repaint(); } return; } if(pause) {//如果暂停 if(key==KeyEvent.VK_C) {//如果按C continueAction();//继续 repaint(); } return;//按其他都执行暂停 } switch (key) { case KeyEvent.VK_DOWN : softDropAction(); break; case KeyEvent.VK_LEFT : moveLeftAction(); break; case KeyEvent.VK_RIGHT : moveRightAction(); break; case KeyEvent.VK_SPACE : hardDropAction(); break; case KeyEvent.VK_UP : rotateRightAction(); break; case KeyEvent.VK_P : //暂停 pauseAction(); break; } repaint();//再画一次 } }; //绑定事件到当前面板 this.requestFocus(); this.addKeyListener(l); } //向右移动的流程控制 public void moveRightAction() { //尝试先向右移动,如果发现超出边界,就向左移动,修正回来 tetromino.moveRight(); if(outOfBounds()||coincide()) {//出界或者重合 tetromino.moveLeft(); } } //向左移动的流程控制 public void moveLeftAction() { //尝试先向右移动,如果发现超出边界,就向左移动,修正回来 tetromino.moveLeft(); if(outOfBounds()||coincide()) {//出界或者重合 tetromino.moveRight(); } } //检查当前正在下落的方块是否出界了 //迭代正在下落的方块,其中某一个格子列坐标出界,就移回 private boolean outOfBounds() { Cell[] cells = tetromino.cells;//cells每一个格 for(int i=0; i Cellcell=cells[i];//cell某一个格 int col = cell.getCol(); if(col<0 || col>=COLS) {//列坐标小于0,大于9 return true;//出界 } } return false; } //检查正在下落的方块和墙上的方块是否重叠 private boolean coincide() { Cell[] cells = tetromino.cells;//cells每一个格 for(int i=0; i Cell cell = cells[i];//cell某一个格 int row = cell.getRow(); int col = cell.getCol(); //如果墙上有格子 if(row>=0&&row =null) { return true;//重叠 } } return false; } //下落流程控制 public void softDropAction() { if(canDrop()) {//如果能下落 tetromino.softDrop();//下落一步 }else { landIntoWall();//进墙 destoryLines();//销毁满的行 checkGameOverAction();//检查是否结束 tetromino = nextOne; nextOne = Tetromino.randomOne();//入墙一个方块,出现下一个方块 } } //检查当前的方块是否能够下落,返回true能下落 private boolean canDrop() { Cell[] cells = tetromino.cells;//cells每一个格 for(int i=0; i Cell cell = cells[i];//cells某一个格 int row = cell.getRow(); if(row == ROWS-1) {//ROWS-1是19 return false;//不能下落 } } for(int i=0; i Cell cell = cells[i]; int row = cell.getRow()+1; int col = cell.getCol(); if(row>=0&&row =null) { return false;//不能下落 } } return true; } //进墙 private void
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 选课 课程 报告