我所知道坦克大战(单机版)之使用键盘控制改变坦克位置

我们发现前两篇文章所造成的坦克,他只能固定一个方向进行移动

那么对于我们来说,一般要么使用鼠标,要么使用键盘控制

那么我们怎么实现这样的方式呢?

实现键盘监听

在java 中我们使用键盘监听的话有两种方式:接口、抽象类

接口用于接收键盘事件(击键)的侦听器。

若处理键盘事件的类实现此接口(及需实现包含的所有方法),即使不需要

若处理键盘事件的类继承抽象KeyAdapter 类(则可以仅重写有用的方法)

public void keyReleased(KeyEvent e)
释放某个键时调用此方法。

public void keyPressed(KeyEvent e)
按下某个键时调用此方法。

public void keyTyped(KeyEvent e)
键入某个键时调用此方法。

我们选择内部类完成键盘按下的方式进行监听测试,同时将监听器添加进来

//继承抽象类完成键盘监听
private class KeyMonitor extends KeyAdapter{
    @Override
    public void keyPressed(KeyEvent e) {
        System.out.println("ok");
    }
}
//定义窗口方法
public void lauchFrame() {
    
    //省略其他关键性代码.....

    //添加监听器
    this.addKeyListener(new KeyMonitor());
}

运行main方法,同时按下键盘看看是否有输出结果,测试成功

image.png

若我们想只使用上下左右键控制坦克进行上下左右方向的控制

则我们需要先获取到按下的键盘key编码,进行匹配

image.png

//继承抽象类完成键盘监听
private class KeyMonitor extends KeyAdapter {
    @Override
    public void keyPressed(KeyEvent e) {
        int key = e.getKeyCode();
        switch (key) {
            case KeyEvent.VK_LEFT:
                x -= 5;
                break;
            case KeyEvent.VK_UP:
                y -= 5;
                break;
            case KeyEvent.VK_RIGHT:
                x += 5;
                break;
            case KeyEvent.VK_DOWN:
                y += 5;
                break;
        }
    }
}

这时我们运行起键盘的↑↓←→ 则可以修改操控坦克圆点的位置了

image.png

参考资料


尚学堂:坦克大战(马士兵老师)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为你提供一个简单的坦克大战小游戏的Python代码,但需要注意的是,这只是一个简单的游戏,可能与正式的坦克大战游戏有所不同。同时,这个游戏没有图形界面,只是在命令行中进行。 代码如下: ```python import random import os import sys import time class Tank: def __init__(self, x, y): self.x = x self.y = y self.blood = 3 def move(self, direction): if direction == 'w': self.y -= 1 elif direction == 's': self.y += 1 elif direction == 'a': self.x -= 1 elif direction == 'd': self.x += 1 def shoot(self): return Bullet(self.x, self.y) def hit(self): self.blood -= 1 if self.blood <= 0: return True return False class Bullet: def __init__(self, x, y): self.x = x self.y = y def move(self): self.y -= 1 class Enemy: def __init__(self, x, y): self.x = x self.y = y self.blood = 2 def move(self): self.y += 1 def shoot(self): return Bullet(self.x, self.y) def hit(self): self.blood -= 1 if self.blood <= 0: return True return False class Game: def __init__(self): self.tank = Tank(10, 10) self.enemies = [] self.bullets = [] self.score = 0 self.game_over = False def add_enemy(self): x = random.randint(0, 20) y = 0 enemy = Enemy(x, y) self.enemies.append(enemy) def move_enemies(self): for enemy in self.enemies: enemy.move() def move_bullets(self): for bullet in self.bullets: bullet.move() def check_collisions(self): for bullet in self.bullets: if bullet.y == self.tank.y and bullet.x == self.tank.x: if self.tank.hit(): self.game_over = True for enemy in self.enemies: for bullet in self.bullets: if bullet.y == enemy.y and bullet.x == enemy.x: if enemy.hit(): self.score += 1 self.enemies.remove(enemy) self.bullets.remove(bullet) if enemy.y == self.tank.y and enemy.x == self.tank.x: if self.tank.hit(): self.game_over = True def update(self): self.move_enemies() self.move_bullets() self.check_collisions() if random.randint(0, 10) < 3: self.add_enemy() def run(self): while not self.game_over: os.system('cls' if os.name == 'nt' else 'clear') for y in range(20): for x in range(20): if x == self.tank.x and y == self.tank.y: print('T', end='') elif any(enemy.x == x and enemy.y == y for enemy in self.enemies): print('E', end='') elif any(bullet.x == x and bullet.y == y for bullet in self.bullets): print('*', end='') else: print('.', end='') print() print('Score:', self.score) print('Blood:', self.tank.blood) time.sleep(0.1) if sys.stdin in select.select([sys.stdin], [], [], 0)[0]: char = sys.stdin.read(1) if char == 'w' or char == 's' or char == 'a' or char == 'd': self.tank.move(char) elif char == ' ': bullet = self.tank.shoot() self.bullets.append(bullet) self.update() print('Game Over!') game = Game() game.run() ``` 这个小游戏由Tank、Bullet和Enemy三个类组成,分别表示玩家控制坦克、子弹和敌人。在游戏中,玩家需要控制坦克移动,并发射子弹消灭敌人。如果敌人碰到了玩家的坦克,或者玩家的坦克被敌人的子弹击中,游戏就会结束。 这个小游戏使用Python的基础语法和面向对象编程的概念,如果你对Python已经有了一定的了解,应该能够理解这个代码。如果你对Python还不是很熟悉,可以通过学习Python的基础语法和面向对象编程的概念来加深理解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值