俄罗斯方块专题(3)
/Constructor
final int X0 = 10, Y0 = 15;
final int CELLSIZE = 12;
public java.awt.Dimension getPreferredSize()
{
return new java.awt.Dimension(2*X0+CELLSIZE*BDWIDTH,2*Y0+CELLSIZE*BDHEIGHT);
}
public GameCanvas()
{
setBackground(java.awt.Color.black);
addKeyListener(new java.awt.event.KeyAdapter(){
public void keyPressed(java.awt.event.KeyEvent e)
{
switch(e.getKeyCode()){
case java.awt.event.KeyEvent.VK_LEFT:
postMessage(new Message(Message.MOVE_LEFT));
break;
case java.awt.event.KeyEvent.VK_RIGHT:
postMessage(new Message(Message.MOVE_RIGHT));
break;
case java.awt.event.KeyEvent.VK_DOWN:
postMessage(new Message(Message.MOVE_DOWN));
break;
case java.awt.event.KeyEvent.VK_UP:
postMessage(new Message(Message.ROTATE_CLOCK));
break;
case java.awt.event.KeyEvent.VK_ENTER:
postMessage(new Message(Message.ROTATE_ANTICLOCK));
break;
case java.awt.event.KeyEvent.VK_PAGE_UP:
postMessage(new Message(Message.MOVE_UP));
break;
case java.awt.event.KeyEvent.VK_SPACE:
if(m_S==0)
m_S = 1;
break;
case java.awt.event.KeyEvent.VK_F1:
if(m_S==3){
m_board.clear();
m_S = 0;
repaintRequest();
}
}
}
});
new Thread(){
public void run()
{
while(true){
try{
sleep(500);
}catch(InterruptedException e){
}
postMessage(new Message(Message.MOVE_DOWN));
}
}
}.start();
new Thread(this).start(); //消息处理线程
}
public void postMessage(Message msg)
{
if(m_S==1 || m_S==2){
synchronized(m_msgQueue){
m_msgQueue.en(msg);
m_msgQueue.notify();
}
}
}
public void repaintRequest()
{
repaint();
}
public void paint(java.awt.Graphics g)
{
//draw m_board
g.setColor(java.awt.Color.blue);
g.drawRect(X0,Y0,CELLSIZE*BDWIDTH-1,CELLSIZE*BDHEIGHT-1);
switch(m_S){
case 1:
case 2:
g.setColor(java.awt.Color.yellow);
break;
case 3:
g.setColor(java.awt.Color.lightGray);
break;
}
for(int i=0,y=Y0; i<BDHEIGHT; i++,y+=CELLSIZE){
for(int j=0,x=X0; j<BDWIDTH; j++,x+=CELLSIZE){
if(m_board.bddata[i][j])
g.fillRect(x,y,CELLSIZE-1,CELLSIZE-1);
}
}
//draw next block show
g.setColor(java.awt.Color.lightGray);
boolean nextBlockData[][] = m_blockDataPoolQueue.peekNextBlockData();
for(int i=0,y=Y0; i<BKSIZE; i++,y+=CELLSIZE){
for(int j=0,x=X0+(BDWIDTH-BKSIZE)*CELLSIZE; j<BKSIZE; j++,x+=CELLSIZE){
if(nextBlockData[i][j])
g.drawRect(x+1,y+1,CELLSIZE-1,CELLSIZE-1);
}
}
//draw m_block
if(m_S==2){
g.setColor(java.awt.Color.red);
for(int i=0,y=Y0+m_block.rpos*CELLSIZE; i<BKSIZE; i++,y+=CELLSIZE){
for(int j=0,x=X0+m_block.cpos*CELLSIZE; j<BKSIZE; j++,x+=CELLSIZE){
if(m_block.bkdata[i][j])
g.fillRect(x,y,CELLSIZE-1,CELLSIZE-1);
}
}
}
g.setColor(java.awt.Color.red);
g.setFont(new java.awt.Font(g.getFont().getFontName(),g.getFont().getStyle(),16));
switch(m_S){
case 0:
g.drawString("按空格键开始游戏!",50,100);
break;
case 3:
g.drawString("游戏结束,按F1键重新开始!",20,100);
break;
}
}
/Constructor
final int X0 = 10, Y0 = 15;
final int CELLSIZE = 12;
public java.awt.Dimension getPreferredSize()
{
return new java.awt.Dimension(2*X0+CELLSIZE*BDWIDTH,2*Y0+CELLSIZE*BDHEIGHT);
}
public GameCanvas()
{
setBackground(java.awt.Color.black);
addKeyListener(new java.awt.event.KeyAdapter(){
public void keyPressed(java.awt.event.KeyEvent e)
{
switch(e.getKeyCode()){
case java.awt.event.KeyEvent.VK_LEFT:
postMessage(new Message(Message.MOVE_LEFT));
break;
case java.awt.event.KeyEvent.VK_RIGHT:
postMessage(new Message(Message.MOVE_RIGHT));
break;
case java.awt.event.KeyEvent.VK_DOWN:
postMessage(new Message(Message.MOVE_DOWN));
break;
case java.awt.event.KeyEvent.VK_UP:
postMessage(new Message(Message.ROTATE_CLOCK));
break;
case java.awt.event.KeyEvent.VK_ENTER:
postMessage(new Message(Message.ROTATE_ANTICLOCK));
break;
case java.awt.event.KeyEvent.VK_PAGE_UP:
postMessage(new Message(Message.MOVE_UP));
break;
case java.awt.event.KeyEvent.VK_SPACE:
if(m_S==0)
m_S = 1;
break;
case java.awt.event.KeyEvent.VK_F1:
if(m_S==3){
m_board.clear();
m_S = 0;
repaintRequest();
}
}
}
});
new Thread(){
public void run()
{
while(true){
try{
sleep(500);
}catch(InterruptedException e){
}
postMessage(new Message(Message.MOVE_DOWN));
}
}
}.start();
new Thread(this).start(); //消息处理线程
}
public void postMessage(Message msg)
{
if(m_S==1 || m_S==2){
synchronized(m_msgQueue){
m_msgQueue.en(msg);
m_msgQueue.notify();
}
}
}
public void repaintRequest()
{
repaint();
}
public void paint(java.awt.Graphics g)
{
//draw m_board
g.setColor(java.awt.Color.blue);
g.drawRect(X0,Y0,CELLSIZE*BDWIDTH-1,CELLSIZE*BDHEIGHT-1);
switch(m_S){
case 1:
case 2:
g.setColor(java.awt.Color.yellow);
break;
case 3:
g.setColor(java.awt.Color.lightGray);
break;
}
for(int i=0,y=Y0; i<BDHEIGHT; i++,y+=CELLSIZE){
for(int j=0,x=X0; j<BDWIDTH; j++,x+=CELLSIZE){
if(m_board.bddata[i][j])
g.fillRect(x,y,CELLSIZE-1,CELLSIZE-1);
}
}
//draw next block show
g.setColor(java.awt.Color.lightGray);
boolean nextBlockData[][] = m_blockDataPoolQueue.peekNextBlockData();
for(int i=0,y=Y0; i<BKSIZE; i++,y+=CELLSIZE){
for(int j=0,x=X0+(BDWIDTH-BKSIZE)*CELLSIZE; j<BKSIZE; j++,x+=CELLSIZE){
if(nextBlockData[i][j])
g.drawRect(x+1,y+1,CELLSIZE-1,CELLSIZE-1);
}
}
//draw m_block
if(m_S==2){
g.setColor(java.awt.Color.red);
for(int i=0,y=Y0+m_block.rpos*CELLSIZE; i<BKSIZE; i++,y+=CELLSIZE){
for(int j=0,x=X0+m_block.cpos*CELLSIZE; j<BKSIZE; j++,x+=CELLSIZE){
if(m_block.bkdata[i][j])
g.fillRect(x,y,CELLSIZE-1,CELLSIZE-1);
}
}
}
g.setColor(java.awt.Color.red);
g.setFont(new java.awt.Font(g.getFont().getFontName(),g.getFont().getStyle(),16));
switch(m_S){
case 0:
g.drawString("按空格键开始游戏!",50,100);
break;
case 3:
g.drawString("游戏结束,按F1键重新开始!",20,100);
break;
}
}
解决方案 »
- java socket 传递对象
- File 无法解析为类型
- 如何在在读取文件时定位及删除行?
- ByteArrayInputStream类的数据怎样转换为String
- 新手求救:怎样获取jTextArea里面的16进制代码.谢谢
- Float类型四舍五入问题?
- 一个郁闷了一个星期的问题!很简单但就是找不出问题在哪里?
- 我连上了 Oracle。可怎么不能取出数据????郁闷,求救!!!!!!
- 本人最近弄了一盘IBM WebSphere,所以想学JAVA,可一点基础都没有,所以请各位大哥传授些学习经验,外加好的学习资料或书。万分感激!!
- Java代码小问题
- 我看到有些转换是这样的(Double),有些是这样的Double.parseDouble,到底有啥区别啊?谢谢
- applet调用的问题
/Constructor
final int X0 = 10, Y0 = 15;
final int CELLSIZE = 12;
public java.awt.Dimension getPreferredSize()
{
return new java.awt.Dimension(2*X0+CELLSIZE*BDWIDTH,2*Y0+CELLSIZE*BDHEIGHT);
}
public GameCanvas()
{
setBackground(java.awt.Color.black);
addKeyListener(new java.awt.event.KeyAdapter(){
public void keyPressed(java.awt.event.KeyEvent e)
{
switch(e.getKeyCode()){
case java.awt.event.KeyEvent.VK_LEFT:
postMessage(new Message(Message.MOVE_LEFT));
break;
case java.awt.event.KeyEvent.VK_RIGHT:
postMessage(new Message(Message.MOVE_RIGHT));
break;
case java.awt.event.KeyEvent.VK_DOWN:
postMessage(new Message(Message.MOVE_DOWN));
break;
case java.awt.event.KeyEvent.VK_UP:
postMessage(new Message(Message.ROTATE_CLOCK));
break;
case java.awt.event.KeyEvent.VK_ENTER:
postMessage(new Message(Message.ROTATE_ANTICLOCK));
break;
case java.awt.event.KeyEvent.VK_PAGE_UP:
postMessage(new Message(Message.MOVE_UP));
break;
case java.awt.event.KeyEvent.VK_SPACE:
if(m_S==0)
m_S = 1;
break;
case java.awt.event.KeyEvent.VK_F1:
if(m_S==3){
m_board.clear();
m_S = 0;
repaintRequest();
}
}
}
});
new Thread(){
public void run()
{
while(true){
try{
sleep(500);
}catch(InterruptedException e){
}
postMessage(new Message(Message.MOVE_DOWN));
}
}
}.start();
new Thread(this).start(); //消息处理线程
}
public void postMessage(Message msg)
{
if(m_S==1 || m_S==2){
synchronized(m_msgQueue){
m_msgQueue.en(msg);
m_msgQueue.notify();
}
}
}
public void repaintRequest()
{
repaint();
}
public void paint(java.awt.Graphics g)
{
//draw m_board
g.setColor(java.awt.Color.blue);
g.drawRect(X0,Y0,CELLSIZE*BDWIDTH-1,CELLSIZE*BDHEIGHT-1);
switch(m_S){
case 1:
case 2:
g.setColor(java.awt.Color.yellow);
break;
case 3:
g.setColor(java.awt.Color.lightGray);
break;
}
for(int i=0,y=Y0; i<BDHEIGHT; i++,y+=CELLSIZE){
for(int j=0,x=X0; j<BDWIDTH; j++,x+=CELLSIZE){
if(m_board.bddata[i][j])
g.fillRect(x,y,CELLSIZE-1,CELLSIZE-1);
}
}
//draw next block show
g.setColor(java.awt.Color.lightGray);
boolean nextBlockData[][] = m_blockDataPoolQueue.peekNextBlockData();
for(int i=0,y=Y0; i<BKSIZE; i++,y+=CELLSIZE){
for(int j=0,x=X0+(BDWIDTH-BKSIZE)*CELLSIZE; j<BKSIZE; j++,x+=CELLSIZE){
if(nextBlockData[i][j])
g.drawRect(x+1,y+1,CELLSIZE-1,CELLSIZE-1);
}
}
//draw m_block
if(m_S==2){
g.setColor(java.awt.Color.red);
for(int i=0,y=Y0+m_block.rpos*CELLSIZE; i<BKSIZE; i++,y+=CELLSIZE){
for(int j=0,x=X0+m_block.cpos*CELLSIZE; j<BKSIZE; j++,x+=CELLSIZE){
if(m_block.bkdata[i][j])
g.fillRect(x,y,CELLSIZE-1,CELLSIZE-1);
}
}
}
g.setColor(java.awt.Color.red);
g.setFont(new java.awt.Font(g.getFont().getFontName(),g.getFont().getStyle(),16));
switch(m_S){
case 0:
g.drawString("按空格键开始游戏!",50,100);
break;
case 3:
g.drawString("游戏结束,按F1键重新开始!",20,100);
break;
}
}
private class BlockDataPoolQueue extends Queue
{
public BlockDataPoolQueue(){ this.currentBlockData = bkdataPool[ran.nextInt(bkdataPool.length)]; }
public boolean[][] peekNextBlockData()
{
return this.currentBlockData;
}
public boolean[][] getNextBlockData()
{
boolean[][] bkd = this.currentBlockData;
this.currentBlockData = bkdataPool[ran.nextInt(bkdataPool.length)];
return bkd;
}
private boolean[][] currentBlockData = null;
private java.util.Random ran = new java.util.Random();
private boolean bkdataPool[][][] ={
{{false,false,true,true,false},
{false,false,true,false,false},
{false,false,true,false,false},
{false,true,true,false,false},
{false,false,false,false,false}},
{{false,false,false,false,false},
{false,true,true,false,false},
{false,false,true,false,false},
{false,false,true,true,false},
{false,false,false,false,false}},
{{false,false,false,false,false},
{false,false,true,false,false},
{false,true,true,true,false},
{false,false,true,false,false},
{false,false,false,false,false}},
{{false,false,false,false,false},
{false,false,false,false,false},
{false,true,true,true,false},
{false,false,false,true,false},
{false,false,false,false,false}},
{{false,false,false,false,false},
{false,true,false,false,false},
{false,false,true,false,false},
{false,false,false,false,false},
{false,false,false,false,false}},
{{false,false,false,false,false},
{false,false,false,false,false},
{false,false,true,false,false},
{false,false,false,false,false},
{false,false,false,false,false}},
{{false,false,false,false,false},
{false,true,true,false,false},
{false,true,true,false,false},
{false,false,false,false,false},
{false,false,false,false,false}},
{{false,false,false,false,false},
{false,false,false,false,false},
{false,true,true,true,false},
{false,false,true,false,false},
{false,false,false,false,false}}};
}
private class Queue
{
private Node head;
private Node tail;
public Queue()
{
head = new Node();
tail = new Node();
head.prev = tail.next = null;
head.next = tail;
tail.prev = head;
}
public void en(Object item)
{
Node q = new Node();
q.data = item;
q.next = tail;
q.prev = tail.prev;
tail.prev.next = q;
tail.prev = q;
}
public Object dl()
{
if(! empty()){
Node p = head.next;
head.next.next.prev = head;
head.next = head.next.next;
return p.data;
}else
return null;
}
public Object peek()
{
if(! empty())
return head.next.data;
else
return null;
}
public boolean empty()
{
return (head.next==tail) || (tail.prev==head);
}
public void clear()
{
head.next = tail;
tail.prev = head;
}
public int elemNum()
{
int num = 0;
for(Node q=head.next; q!=tail; q=q.next)
num++;
return num;
}
private class Node
{
Object data;
Node prev;
Node next;
}
}