给我坦克大战的C语言代码
时间: 2023-12-02 20:07:12 浏览: 114
坦克大战C语言源代码
好的,这里给你提供一个简单的坦克大战的C语言代码,仅供参考。
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define WIDTH 80
#define HEIGHT 25
int x, y;
int enemyX, enemyY;
int score = 0;
int level = 1;
void drawTank(int x, int y)
{
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
printf(" ▄");
pos.Y = y + 1;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
printf("▀███▀");
pos.Y = y + 2;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
printf(" █");
}
void drawEnemy(int x, int y)
{
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
printf("▄▄▄");
pos.Y = y + 1;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
printf("███");
pos.Y = y + 2;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
printf("▀▀▀");
}
void drawBullet(int x, int y)
{
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
printf("▄");
}
void clearBullet(int x, int y)
{
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
printf(" ");
}
void clearTank(int x, int y)
{
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
printf(" ");
pos.Y = y + 1;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
printf(" ");
pos.Y = y + 2;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
printf(" ");
}
void clearEnemy(int x, int y)
{
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
printf(" ");
pos.Y = y + 1;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
printf(" ");
pos.Y = y + 2;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
printf(" ");
}
void gameOver()
{
system("cls");
printf("游戏结束!\n");
printf("您的得分为:%d\n", score);
printf("您的等级为:%d\n", level);
exit(0);
}
int main()
{
char ch;
int bulletX, bulletY;
int enemyDir = 0;
// 隐藏光标
CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
// 初始化玩家坦克和敌方坦克位置
x = WIDTH / 2 - 1;
y = HEIGHT - 3;
enemyX = rand() % (WIDTH - 4) + 2;
enemyY = 1;
// 游戏循环
while (1)
{
// 绘制玩家坦克和敌方坦克
drawTank(x, y);
drawEnemy(enemyX, enemyY);
// 发射子弹
bulletX = x + 1;
bulletY = y - 1;
while (bulletY >= 0)
{
// 绘制子弹
drawBullet(bulletX, bulletY);
// 判断是否击中敌方坦克
if (bulletX >= enemyX && bulletX <= enemyX + 2 && bulletY >= enemyY && bulletY <= enemyY + 2)
{
score++;
clearEnemy(enemyX, enemyY);
enemyX = rand() % (WIDTH - 4) + 2;
enemyY = 1;
break;
}
// 清除子弹
clearBullet(bulletX, bulletY);
// 移动子弹
bulletY--;
// 等待
Sleep(50);
}
// 判断玩家是否被击中
if (bulletX >= x && bulletX <= x + 2 && bulletY == y)
{
gameOver();
}
// 移动敌方坦克
if (enemyDir == 0)
{
if (enemyY < HEIGHT - 3)
{
clearEnemy(enemyX, enemyY);
enemyY++;
}
else
{
enemyDir = 1;
}
}
else
{
if (enemyY > 1)
{
clearEnemy(enemyX, enemyY);
enemyY--;
}
else
{
enemyDir = 0;
}
}
// 接收玩家输入
if (_kbhit())
{
ch = _getch();
clearTank(x, y);
switch (ch)
{
case 'a':
if (x > 2)
{
x--;
}
break;
case 'd':
if (x < WIDTH - 4)
{
x++;
}
break;
case ' ':
break;
}
}
// 判断玩家是否胜利
if (score == 10)
{
level++;
score = 0;
}
// 清除屏幕
system("cls");
}
return 0;
}
```
这只是一个简单的示例代码,游戏的完整实现需要更多的代码和细节处理。
阅读全文