1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > c语言雷霆战机小游戏

c语言雷霆战机小游戏

时间:2022-05-10 15:41:25

相关推荐

c语言雷霆战机小游戏

#include<stdio.h>

#include<string.h>

#include<conio.h>

#include<windows.h>

#include<stdlib.h>

#define MAX 100

long long int speed = 0;//控制敌机的速度

int position_x, position_y;//飞机的所在位置

int high, width;//地图的大小

int bullet_x, bullet_y;//子弹的位置

int enemy_x, enemy_y;//敌人的位置

int map[MAX][MAX];

/*0表示空白,1表示战机*的区域,2表示敌人战机的位置。

3表示上下围墙,4表示左右围墙,5表示子弹的位置*/

int score;

void starup()//初始化所有的信息

{

high = 20;

width = 30;

position_x = high / 2;

position_y = width / 2;

bullet_x = 0;

bullet_y = position_y;

enemy_x = 2;

enemy_y = position_y - 1;

score = 0;

}

void startMap()

{

int i, j;

for (i = 1; i <= high - 1; i++)

{

map[i][1] = 4;

for (j = 2; j <= width - 1; j++)

map[i][j] = 0;

map[i][width] = 4;

}

//下方围墙的初始化

i = high;

for (j = 1; j <= width; j++)

map[i][j] = 3;

map[bullet_x][bullet_y] = 5;

/*这里是战机大小的初始化开始*/

map[position_x - 1][position_y] = 1;

i = position_x;

for (j = position_y - 2; j <= position_y + 2; j++)

map[i][j] = 1;

map[position_x + 1][position_y - 1] = 1;

map[position_x + 1][position_y + 1] = 1;

/*** 初始化结束**/

/* 敌人战机的初始化 */

map[enemy_x][enemy_y] = 2;

map[enemy_x - 1][enemy_y - 1] = 2;

map[enemy_x - 1][enemy_y + 1] = 2;

/* 敌人战机初始化结束*/

}

void HideCursor()//隐藏光标

{

CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);

}

void gotoxy(int x, int y)//清理一部分屏幕

{

HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);

COORD pos;

pos.X = x;

pos.Y = y;

SetConsoleCursorPosition(handle, pos);

}

void updateWithoutInput()//于输入无关的跟新

{

if (bullet_x > 0)

bullet_x--;

if ((bullet_x == enemy_x) && (bullet_y == enemy_y)||(bullet_x== enemy_x-1&&bullet_y == enemy_y-1)||(bullet_x== enemy_x-1&&bullet_y == enemy_y+1))//当敌人的飞机被击中时

{

score++;

enemy_x = 0;

enemy_y = rand() % width;

bullet_x = 0;

}

if (enemy_x > high)//当飞机超出区域

{

enemy_x = 0;

enemy_y = rand() % width;

}

if (speed == 1)

for (int i = 1; i <= 100000; i++)//用来控制敌机的速度

{

for (int j = 1; j <= 1000; j++)

{

speed = 1;

}

}

speed = 0;

if (speed == 0)

{

enemy_x++;

if(map[enemy_x][enemy_y]==1) score--;

speed = 1;

}

}

void updateWithInput()//与输入有关的更新

{

char input;

if (kbhit())//在VC6.0++下,为_kbhit()

{

input = getch();//在VC6.0++下为_getch();

if (input == 'a'&&map[position_x][position_y - 3]!=4)

position_y--;

if (input == 's'&&map[position_x + 2][position_y - 1]!=3)

position_x++;

if (input == 'd'&&map[position_x][position_y+3]!=4)

position_y++;

if (input == 'w'&&position_x-2>=0)

position_x--;

if (input == ' ')

{

bullet_x = position_x - 1;

bullet_y = position_y;

}

}

}

void show()//展示的内容

{

gotoxy(0, 0);

int i, j;

for (i = 1; i <= high; i++)

{

for (j = 1; j <= width; j++)

{

if (map[i][j] == 0)

printf(" ");

if (map[i][j] == 1)

printf("*");

if (map[i][j] == 2)

printf("#");

if (map[i][j] == 3)

printf("~");

if (map[i][j] == 4)

printf("|");

if (map[i][j] == 5)

printf("|");

}

printf("\n");

}

printf("\n你的得分:%d\n\n", score);

printf("操作说明: ASDW分别操作 左下右上四个的移动\n");

printf("**空格是发出子弹**\n");

printf("被敌机头部碰到会扣掉1~2分,具体取决与敌机头部与战机的接触点有多少个\n");

}

int main()

{

starup();

while (1)

{

HideCursor();

startMap();

show();

updateWithoutInput();

updateWithInput();

}

return 0;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。