Java 遊戲程式設計:鍵盤控制 (Java Game Programming: Control a Sprite with the Keyboard )

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

底下為使用鍵盤控制兩個形狀:正方形和圓形的範例。

鍵盤使用說明:

  1. 向上鍵為控制正方形往上移。
  2. 向下鍵為控制正方形往下移。
  3. 向左鍵為控制正方形往左移。
  4. 向右鍵為控制正方形往右移。
  5. W鍵為控制圓形往上移。
  6. X鍵為控制圓形往下移。
  7. A鍵為控制圓形往左移。
  8. D鍵為控制圓形往右移。




package holan.tw;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.Timer;
public class GameInput extends JFrame implements KeyListener {
final int SCREEN_WIDTH = 400;
final int SCREEN_HEIGHT = 400;
final int RECT_WIDTH = 20;
final int RECT_HEIGHT = 20;
final int SPRITES_NUM = 2;
int xSpeed = 20;
int ySpeed = 20;
int xPos = SCREEN_WIDTH / 2;
int yPos = SCREEN_HEIGHT / 2;
int[] spritePosX = new int[SPRITES_NUM];
int[] spritePosY = new int[SPRITES_NUM];
public GameInput() {
setTitle("遊戲基礎-鍵盤控制");
setSize(SCREEN_WIDTH, SCREEN_HEIGHT);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
addKeyListener(this);
for(int i = 0; i < SPRITES_NUM; i++) {
spritePosX[i] = xPos;
spritePosY[i] = yPos;
}
}
public void update(Graphics g) {
this.paint(g);
}
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.GREEN);
g.fillRect(spritePosX[0], spritePosY[0], RECT_WIDTH, RECT_HEIGHT);
g.setColor(Color.RED);
g.fillOval(spritePosX[1], spritePosY[1], RECT_WIDTH, RECT_HEIGHT);
}
public static void main(String[] args) {
new GameInput().show();
}
@Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
// Move the Square
if( key == KeyEvent.VK_UP )
spritePosY[0] -= ySpeed;
if( key == KeyEvent.VK_DOWN )
spritePosY[0] += ySpeed;
if( key == KeyEvent.VK_LEFT )
spritePosX[0] -= xSpeed;
if( key == KeyEvent.VK_RIGHT )
spritePosX[0] += xSpeed;
// Move the Circle
if( key == KeyEvent.VK_W )
spritePosY[1] -= ySpeed;
if( key == KeyEvent.VK_X )
spritePosY[1] += ySpeed;
if( key == KeyEvent.VK_A )
spritePosX[1] -= xSpeed;
if( key == KeyEvent.VK_D)
spritePosX[1] += xSpeed;
checkSpritePosRange();
repaint();
}
private void checkSpritePosRange() {
for(int i = 0; i < SPRITES_NUM; i++) {
if( spritePosX[i] < 0) spritePosX[i] = SCREEN_WIDTH;
if( spritePosY[i] < 0) spritePosY[i] = SCREEN_HEIGHT;
if( spritePosX[i] > SCREEN_WIDTH) spritePosX[i] = 0;
if( spritePosY[i] > SCREEN_HEIGHT) spritePosY[i] = 0;
}
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyTyped(KeyEvent e) {
}
}
view raw GameInput.java hosted with ❤ by GitHub

沒有留言: