java吃豆游戏_利用java编写的精灵吃豆的游戏
學完線程的時候做了一個精靈吃豆的小游戲。
窗體類:
package www.csdn.net.zuoye;
//用窗體實現精靈吃豆子的小游戲
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class GameJFrame extends JFrame implements KeyListener {
// 定義起始位置
private int x = 30, y = 30;
// 定義中間變量
private boolean flag = true;
private static final int DIR_UP = 1;
private static final int DIR_DOWN = 2;
private static final int DIR_LEFT = 3;
private static final int DIR_RIGHT = 4;
// 定義初始化弧度
private int arc1 = 20;
private int arc2 = 320;
// 定義計數器(通過計數器讓上下兩張嘴都動起來)
private int count = 0;
// 定義豆的對象
private Bean bean;
// 定義方向
private int dir = -1;
// 生成隨機數
private Random random;
//定義分數
private int score=0;
//定義速度
private int k=100;
public GameJFrame() {
this.setBounds(300, 200, 200, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setResizable(false);
/*
* 1.this.setBackground(Color.gray);
* this.getContentPane().setVisible(false);
*/
this.getContentPane().setBackground(Color.pink);
new Thread() {
public void run() {
while (flag) {
try {
boolean temp = checkHit();
if (temp) {
initBean();
score++;
if(score%10==0){
k-=5;
}
}
Thread.sleep(k);
count++;
if (count % 2 == 0) {// 嘴張開以及閉住的情況
arc1 = 40;
arc2 = 280;
} else {
arc1 = 20;
arc2 = 320;
}
switch (dir) {
case DIR_UP:
y -= 5;
break;
case DIR_DOWN:
y += 5;
break;
case DIR_LEFT:
x -= 5;
break;
case DIR_RIGHT:
x += 5;
break;
default:
break;
}
repaint();
if (y > 275 || y < 30) {
flag = false;
JOptionPane.showMessageDialog(null, "游戲結束,你的分數為:"+score);
dispose();
}else if(x>176||x==0){
flag=false;
JOptionPane.showMessageDialog(null, "游戲結束,你的分數為:"+score);
dispose();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
// 添加監聽
this.addKeyListener(this);
// 創建隨機的對象
random = new Random();
initBean();
}
public void initBean() {
// 隨機產生坐標
int rx = random.nextInt(5)+10;
int ry = random.nextInt(15)+7;
// 產生豆
bean = new Bean(rx * Bean.r * 2, ry * Bean.r * 2);// 坐標必須是隨機產生的
}
@Override
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.red);// 設置繪制的顏色
switch (dir) {
case DIR_UP:
g.fillArc(x, y, 20, 20, arc1 + 90, arc2);
break;
case DIR_DOWN:
g.fillArc(x, y, 20, 20, arc1 + 270, arc2);
break;
case DIR_LEFT:
g.fillArc(x, y, 20, 20, arc1 + 180, arc2);
break;
case DIR_RIGHT:
g.fillArc(x, y, 20, 20, arc1, arc2);
break;
default:// 為了能夠顯示,需要有個顯示的狀態
g.fillArc(x, y, 20, 20, arc1, arc2);
}
// 繪制豆
g.setColor(Color.yellow);
g.fillArc(bean.getX(), bean.getY(), Bean.r * 2, Bean.r * 2, 0, 360);
// g.fillArc(x, y, 20, 20, arc1, arc2);//圓形
// g.fillRect(50, 30, 20, 20);//矩形
}
public static void main(String[] args) {
GameJFrame g = new GameJFrame();
g.setVisible(true);
}
/**
* 輸入某個鍵的時候執行
*/
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
System.out.println("鍵入");
}
/**
* 按下的時候執行
*/
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
// System.out.println("按鍵");
// 獲取按鍵的值
int key = e.getKeyCode();// 查詢鍵值(用這個方法給上下左右鍵加事件)
// 根據上下左右箭頭改變方法
switch (key) {
case 38:
dir = DIR_UP;
break;
case 40:
dir = DIR_DOWN;
break;
case 37:
dir = DIR_LEFT;
break;
case 39:
dir = DIR_RIGHT;
break;
default:
break;
}
}
/**
* 抬起的時候執行
*/
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
// System.out.println("抬起");
}
// 定義碰撞檢測
public boolean checkHit() {
if (bean != null) {
if (bean.getX() == x) {
if (Math.abs(bean.getY() - y) < 13) {
return true;// 被碰到了
}
}
if (bean.getY() == y) {
if (Math.abs(bean.getX() - x) < 13) {
return true;
}
}
}
return false;
}
}
豆子類:
package www.csdn.net.zuoye;
//繪制豆
public class Bean {
// 坐標
private int x, y;
// 豆的半徑
public static int r=5;
public int getX() {//獲取橫坐標
return x;
}
public int getY() {//獲取縱坐標
return y;
}
public Bean(int x, int y) {
this.x = x;
this.y = y;
}
}
效果:
總結
以上是生活随笔為你收集整理的java吃豆游戏_利用java编写的精灵吃豆的游戏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java接口 泛型_java 泛型接口示
- 下一篇: python提取abaqus数据_Pyt