六种编程语言制作坦克大战

C++(最常用的游戏编程语言)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include <iostream>
#include <conio.h>
using namespace std;

const int width = 20; // 游戏区域宽度
const int height = 20; // 游戏区域高度
bool gameOver;
int x, y; // 坦克位置
int targetX, targetY; // 目标位置
int score;

enum Direction { STOP = 0, LEFT, RIGHT, UP, DOWN };
Direction dir;

void Setup() {
gameOver = false;
dir = STOP;
x = width / 2;
y = height / 2;
targetX = rand() % width;
targetY = rand() % height;
score = 0;
}

void Draw() {
system("cls");
for (int i = 0; i < width+2; i++)
cout << "#";
cout << endl;

for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
if (j == 0)
cout << "#";
if (i == y && j == x)
cout << "T";
else if (i == targetY && j == targetX)
cout << "X";
else
cout << " ";
if (j == width - 1)
cout << "#";
}
cout << endl;
}

for (int i = 0; i < width+2; i++) {
cout << "#";
}
cout << endl;
cout << "Score:" << score << endl;
}

void Input() {
if (_kbhit()) {
switch (_getch()) {
case 'a':
dir = LEFT;
break;
case 'd':
dir = RIGHT;
break;
case 'w':
dir = UP;
break;
case 's':
dir = DOWN;
break;
case 'x':
gameOver = true;
break;
}
}
}

void Logic() {
switch (dir) {
case LEFT:
x--;
break;
case RIGHT:
x++;
break;
case UP:
y--;
break;
case DOWN:
y++;
break;
default:
break;
}
if (x >= width)
x = 0;
else if (x < 0)
x = width - 1;
if (y >= height)
y = 0;
else if (y < 0)
y = height - 1;

if (x == targetX && y == targetY) {
score += 10;
targetX = rand() % width;
targetY = rand() % height;
}
}

int main() {
Setup();
while (!gameOver) {
Draw();
Input();
Logic();
}
return 0;
}
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import pygame
import random

# 初始化
pygame.init()

# 游戏窗口尺寸
window_width = 800
window_height = 600

# 颜色定义
black = (0, 0, 0)
white = (255, 255, 255)
red = (255, 0, 0)

# 创建游戏窗口
window = pygame.display.set_mode((window_width, window_height))
pygame.display.set_caption("坦克大战")

clock = pygame.time.Clock()

# 加载坦克图片
tank_image = pygame.image.load("tank.png")

def tank(x, y):
# 绘制坦克
window.blit(tank_image, (x, y))

def game_loop():
game_over = False

# 坦克初始位置
tank_x = window_width // 2 - 25
tank_y = window_height - 50

# 移动速度
tank_speed = 5

while not game_over:
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True

keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
tank_x -= tank_speed
if keys[pygame.K_RIGHT]:
tank_x += tank_speed
if keys[pygame.K_UP]:
tank_y -= tank_speed
if keys[pygame.K_DOWN]:
tank_y += tank_speed

# 边界检测
if tank_x < 0:
tank_x = 0
if tank_x > window_width - 50:
tank_x = window_width - 50
if tank_y < 0:
tank_y = 0
if tank_y > window_height - 50:
tank_y = window_height - 50

window.fill(white)
tank(tank_x, tank_y)

pygame.display.update()
clock.tick(60)

pygame.quit()

game_loop()
HTML
  • 坦克大战是一个较复杂的游戏,使用HTML单独编写可能较为困难。通常,HTML结合JavaScript和CSS来创建游戏更加实用。以下是一个基于HTML、CSS和JavaScript的简单坦克大战示例

  • index.html

1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE html>
<html>
<head>
<title>坦克大战</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<canvas id="gameCanvas" width="800" height="600"></canvas>
<script src="game.js"></script>
</body>
</html>
  • style.css
1
2
3
 #gameCanvas {
border: 1px solid black;
}
  • game.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
var canvas = document.getElementById("gameCanvas");
var context = canvas.getContext("2d");

var tank = {
x: canvas.width / 2,
y: canvas.height - 50,
width: 50,
height: 50,
speed: 5
};

function drawTank() {
context.fillStyle = "blue";
context.fillRect(tank.x, tank.y, tank.width, tank.height);
}

function clearCanvas() {
context.clearRect(0, 0, canvas.width, canvas.height);
}

function update() {
clearCanvas();
drawTank();
}

function handleKeyPress(e) {
if (e.key === "ArrowLeft") {
tank.x -= tank.speed;
} else if (e.key === "ArrowRight") {
tank.x += tank.speed;
} else if (e.key === "ArrowUp") {
tank.y -= tank.speed;
} else if (e.key === "ArrowDown") {
tank.y += tank.speed;
}
}

function gameLoop() {
update();
requestAnimationFrame(gameLoop);
}

document.addEventListener("keydown", handleKeyPress);
gameLoop();
这是一组需要游戏引擎的代码

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using UnityEngine;

public class TankController : MonoBehaviour
{
public float moveSpeed = 5f;
public float rotateSpeed = 100f;

private Rigidbody2D rb;

void Start()
{
rb = GetComponent<Rigidbody2D>();
}

void Update()
{
float horizontalInput = Input.GetAxis("Horizontal");
float verticalInput = Input.GetAxis("Vertical");

rb.velocity = transform.up * verticalInput * moveSpeed;
rb.angularVelocity = -horizontalInput * rotateSpeed;
}
}

  • 在这个示例中,我们创建了一个名为TankController的脚本,将其附加到坦克的游戏对象上。脚本中的moveSpeedrotateSpeed变量控制了坦克的移动速度和旋转速度。Start方法初始化了坦克的刚体组件,Update方法在每一帧中检测玩家输入,并根据输入控制坦克的移动和旋转。你可以在Unity编辑器中创建一个2D或3D场景,并将坦克模型导入到场景中。然后将TankController脚本附加到坦克游戏对象上,运行游戏即可控制坦克移动和旋转。
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;

public class TankGame extends ApplicationAdapter {
private SpriteBatch batch;
private Texture tankTexture;
private float tankX, tankY;
private float tankSpeed = 5f;

@Override
public void create() {
batch = new SpriteBatch();
tankTexture = new Texture("tank.png");
tankX = Gdx.graphics.getWidth() / 2 - tankTexture.getWidth() / 2;
tankY = Gdx.graphics.getHeight() / 2 - tankTexture.getHeight() / 2;
}

@Override
public void render() {
handleInput();
update();

Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

batch.begin();
batch.draw(tankTexture, tankX, tankY);
batch.end();
}

private void handleInput() {
if (Gdx.input.isKeyPressed(Input.Keys.LEFT)) {
tankX -= tankSpeed;
} else if (Gdx.input.isKeyPressed(Input.Keys.RIGHT)) {
tankX += tankSpeed;
} else if (Gdx.input.isKeyPressed(Input.Keys.UP)) {
tankY += tankSpeed;
} else if (Gdx.input.isKeyPressed(Input.Keys.DOWN)) {
tankY -= tankSpeed;
}
}

private void update() {
// 游戏逻辑更新
}

@Override
public void dispose() {
batch.dispose();
tankTexture.dispose();
}
}

  • 在这个示例中,我们创建了一个名为TankGame的类,它继承自ApplicationAdapter,这是libGDX游戏框架提供的基类。在create方法中,我们初始化了批处理器和坦克的纹理,并设置了坦克的初始位置。在render方法中,我们处理玩家输入、更新游戏逻辑并渲染游戏场景。在handleInput方法中,我们检测玩家的键盘输入并相应地移动坦克的位置。你可以根据需要修改和扩展这个示例代码,并使用libGDX的其他功能来实现更多的游戏功能。
JavaScript和HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<!DOCTYPE html>
<html>
<head>
<title>Tank Game</title>
<style>
#gameCanvas {
border: 1px solid black;
}
</style>
</head>
<body>
<canvas id="gameCanvas" width="800" height="600"></canvas>

<script>
var canvas = document.getElementById("gameCanvas");
var ctx = canvas.getContext("2d");

var tank = {
x: canvas.width / 2,
y: canvas.height / 2,
speed: 5
};

function drawTank() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = "green";
ctx.fillRect(tank.x, tank.y, 50, 50);
}

function handleInput(e) {
if (e.key === "ArrowLeft") {
tank.x -= tank.speed;
} else if (e.key === "ArrowRight") {
tank.x += tank.speed;
} else if (e.key === "ArrowUp") {
tank.y -= tank.speed;
} else if (e.key === "ArrowDown") {
tank.y += tank.speed;
}
}

document.addEventListener("keydown", handleInput);

function gameLoop() {
drawTank();
requestAnimationFrame(gameLoop);
}

gameLoop();
</script>
</body>
</html>
  • 在这个示例中,我们使用HTML5的Canvas元素作为游戏画布,并使用JavaScript来控制游戏逻辑和渲染。我们创建了一个名为tank的对象来表示坦克的位置和速度。在drawTank函数中,我们使用ctx对象清除画布并绘制一个绿色的矩形来表示坦克。在handleInput函数中,我们检测玩家的键盘输入并根据按键来移动坦克的位置。在gameLoop函数中,我们在每一帧中调用drawTank函数来更新游戏画面。

———————— Powered by Shihaoran ————————————————-