C语言小游戏------双人格斗小游戏

简介: C语言写的双人格斗小游戏小游戏

/*--------------------------------------

project: 双人小游戏

anthor:   LLz  

操作    移动    逆、顺时针旋转   发射子弹  

玩家1   4568    7 9          0  

玩家2   adws    q e          空格        

--------------------------------*/  

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <windows.h>

#define High 20  // 游戏画面尺寸

#define Width 100        

// 全局变量

int position_x,position_y,p_x,p_y,turn_a,turn_b,num_a,num_b,num_max,life_a = 10,life_b = 10; // 飞机位置

int canvas[High][Width] = {0}; // 二维数组存储游戏画布中对应的元素

                       // 0为空格,1为飞机*,2为子弹|,3为敌机@

int next[8][2] = {{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}}; //从右  右下  下  左下  

int bullet_a[21][4];

int bullet_b[21][4];   //a b玩家子弹20发;            

void gotoxy(int x,int y)  //光标移动到(x,y)位置

{

   HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);

   COORD pos;

   pos.X = x;

   pos.Y = y;

   SetConsoleCursorPosition(handle,pos);

}  

void startup() // 数据初始化

{

num_a = 0;

num_b = 0;

turn_a = 0;

turn_b = 0;

p_x = High/2;

p_y = Width* 4 / 5;

canvas[p_x][p_y] = 5;

position_x = High/2;

position_y = Width/5;

canvas[position_x][position_y] = 1;  

}

void show()  // 显示画面

{

gotoxy(0,0);  // 光标移动到原点位置,以下重画清屏

int i,j;

for (i=0;i<High;i++)

{

 for (j=0;j<Width;j++)

 {

  if( i == 0 || i == High -1 || j == 0 || j == Width -1){

   canvas[i][j] = 4;

   printf("0");

   continue;

  }

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

   printf(" ");   //   输出空格

  else if (canvas[i][j]==1)

   printf("N");   //   输出飞机a

  else if (canvas[i][j]==2)

   printf("@");   //   输出飞机B

  else if (canvas[i][j]==3)

   printf("o");   //  输出子弹o  

  else if (canvas[i][j]==4)

   printf("o");   // 输出飞机a指向  

  else if (canvas[i][j]==5)

   printf("o");   // 输出飞机b指向  

 }

 printf("\n");

}

printf("A:");

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

 if( i <= life_a)

  printf("■");

 else printf(" ");

printf("\nB: ");

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

 if( i <= life_b)

  printf("■");

 else printf(" ");

}  

void updateWithoutInput()  // 与用户输入无关的更新

{  

int i,j,k;

num_max = num_a > num_b? num_a : num_b;

for( i = 1; i <= num_max; i++){

  if( bullet_a[i][2] == 0 || bullet_a[i][2] == High - 1){

   bullet_a[i][0] = -bullet_a[i][0];

  }

  else if( bullet_a[i][3] == 0 || bullet_a[i][3] == Width - 1){

   bullet_a[i][1] = -bullet_a[i][1];

  }

  if( bullet_b[i][2] == 0 || bullet_b[i][2] == High - 1){

   bullet_b[i][0] = -bullet_b[i][0];

  }

  else if( bullet_b[i][3] == 0 || bullet_b[i][3] == Width - 1){

   bullet_b[i][1] = -bullet_b[i][1];

  }

  canvas[ bullet_a[i][2] ][ bullet_a[i][3] ] = 0;

  canvas[ bullet_b[i][2] ][ bullet_b[i][3] ] = 0;

  bullet_a[i][2] += bullet_a[i][0];

  bullet_a[i][3] += bullet_a[i][1];

  bullet_b[i][2] += bullet_b[i][0];

  bullet_b[i][3] += bullet_b[i][1];

  canvas[ bullet_a[i][2] ][ bullet_a[i][3] ] = 3;

  canvas[ bullet_b[i][2] ][ bullet_b[i][3] ] = 3;

}

for (k=1;k<=num_max;k++)

{

 if (((position_x==bullet_a[k][2]) && (position_y==bullet_a[k][3]))||((position_x==bullet_b[k][2]) && (position_y==bullet_b[k][3])))  // 敌机撞到我机

 {

  life_a--;

  if( life_a <= 0){

   printf("A 玩家失败!\n");

   Sleep(3000);

   system("pause");

   exit(0);

  }

 }

 if (((p_x==bullet_a[k][2]) && (p_y==bullet_a[k][3]))||((p_x==bullet_b[k][2]) && (p_y==bullet_b[k][3])))  // 敌机撞到我机

 {

  life_b--;

  if( life_b <= 0){

   printf("B 玩家失败!\n");

   Sleep(3000);

   system("pause");

   exit(0);

  }

 }

}

}

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

{

char input;

if(kbhit())  // 判断是否有输入

{

 input = getch();  // 根据用户的不同输入来移动,不必输入回车

 if (input == 'a' && position_y>1)  

 {

  canvas[position_x + next[turn_a][0]][position_y + next[turn_a][1]] = 0;

  canvas[position_x][position_y] = 0;

  position_y--;  // 位置左移

  canvas[position_x][position_y] = 1;

  canvas[position_x + next[turn_a][0]][position_y + next[turn_a][1]] = 4;

 }

 else if (input == 'd' && position_y<Width-2)

 {

  canvas[position_x + next[turn_a][0]][position_y + next[turn_a][1]] = 0;

  canvas[position_x][position_y] = 0;

  position_y++;  // 位置右移

  canvas[position_x][position_y] = 1;

  canvas[position_x + next[turn_a][0]][position_y + next[turn_a][1]] = 4;

 }

 else if (input == 'w' && position_x > 1)

 {

  canvas[position_x + next[turn_a][0]][position_y + next[turn_a][1]] = 0;

  canvas[position_x][position_y] = 0;

  position_x--;  // 位置上移

  canvas[position_x][position_y] = 1;

  canvas[position_x + next[turn_a][0]][position_y + next[turn_a][1]] = 4;

 }

 else if (input == 's'&& position_x < High - 2)

 {

  canvas[position_x + next[turn_a][0]][position_y + next[turn_a][1]] = 0;

  canvas[position_x][position_y] = 0;

  position_x++;  // 位置下移

  canvas[position_x][position_y] = 1;

  canvas[position_x + next[turn_a][0]][position_y + next[turn_a][1]] = 4;

 }  

 else if (input == ' ' && num_a <= 20)  // 发射子弹

 {

  num_a++;

  bullet_a[num_a][0] = next[turn_a][0];

  bullet_a[num_a][1] = next[turn_a][1];

  bullet_a[num_a][2] = position_x + bullet_a[num_a][0];

  bullet_a[num_a][3] = position_y + bullet_a[num_a][1];

  canvas[ bullet_a[num_a][2] ][ bullet_a[num_a][3] ] = 3;

 }

 else if (input == 'q')  // 炮弹换方向  

 {

  canvas[position_x + next[turn_a][0]][position_y + next[turn_a][1]] = 0;

  turn_a--;

  if(turn_a < 0)

   turn_a = 7;

  canvas[position_x + next[turn_a][0]][position_y + next[turn_a][1]] = 4;

 }

 else if (input == 'e')  //  炮弹换方向  

 {

  canvas[position_x + next[turn_a][0]][position_y + next[turn_a][1]] = 0;

  turn_a++;

  if(turn_a > 7)

   turn_a = 0;

  canvas[position_x + next[turn_a][0]][position_y + next[turn_a][1]] = 4;

 }

 else if (input == '4' && position_y>1)  

 {

  canvas[p_x + next[turn_b][0]][p_y + next[turn_b][1]] = 0;

  canvas[p_x][p_y] = 0;

  p_y--;  // 位置左移

  canvas[p_x][p_y] = 2;

  canvas[p_x + next[turn_b][0]][p_y + next[turn_b][1]] = 5;

 }

 else if (input == '6' && p_y<Width-2)

 {

  canvas[p_x + next[turn_b][0]][p_y + next[turn_b][1]] = 0;

  canvas[p_x][p_y] = 0;

  p_y++;  // 位置右移

  canvas[p_x][p_y] = 2;

  canvas[p_x + next[turn_b][0]][p_y + next[turn_b][1]] = 5;

 }

 else if (input == '8' && p_x > 1)

 {

  canvas[p_x + next[turn_b][0]][p_y + next[turn_b][1]] = 0;

  canvas[p_x][p_y] = 0;

  p_x--;  // 位置上移

  canvas[p_x][p_y] = 2;

  canvas[p_x + next[turn_b][0]][p_y + next[turn_b][1]] = 5;

 }

 else if (input == '5' && p_x < High - 2)

 {

  canvas[p_x + next[turn_b][0]][p_y + next[turn_b][1]] = 0;

  canvas[p_x][p_y] = 0;

  p_x++;  // 位置下移

  canvas[p_x][p_y] = 2;

  canvas[p_x + next[turn_b][0]][p_y + next[turn_b][1]] = 5;

 }  

 else if (input == '0' && num_b <= 20)  // 发射子弹

 {

  num_b++;

  bullet_b[num_b][0] = next[turn_b][0];

  bullet_b[num_b][1] = next[turn_b][1];

  bullet_b[num_b][2] = p_x + bullet_b[num_b][0];

  bullet_b[num_b][3] = p_y + bullet_b[num_b][1];

  canvas[ bullet_b[num_b][2] ][ bullet_b[num_b][3] ] = 3;

 }  

 else if (input == '7')  // 炮弹换方向  

 {

  canvas[p_x + next[turn_b][0]][p_y + next[turn_b][1]] = 0;

  turn_b--;

  if(turn_b < 0)

   turn_b = 7;

  canvas[p_x + next[turn_b][0]][p_y + next[turn_b][1]] = 5;

 }

 else if (input == '9')  //  炮弹换方向  

 {

  canvas[p_x + next[turn_b][0]][p_y + next[turn_b][1]] = 0;

  turn_b++;

  if(turn_b > 7)

   turn_b = 0;

  canvas[p_x + next[turn_b][0]][p_y + next[turn_b][1]] = 5;

 }

}

}

int main()

{

startup();  // 数据初始化

system("color 30");

while (1)  // 游戏循环执行

{

 show();  // 显示画面

 updateWithoutInput();  // 与用户输入无关的更新

 updateWithInput();  // 与用户输入有关的更新

}

return 0;

}

相关文章
|
1月前
|
C语言 C++
【C语言】编写“猜数字“小游戏
【C语言】编写“猜数字“小游戏
|
2月前
|
定位技术 API C语言
C语言——实现贪吃蛇小游戏
本文介绍了一个基于Windows控制台的贪吃蛇游戏的实现方法。首先,需调整控制台界面以便更好地显示游戏。接着,文章详细描述了如何使用Win32 API函数如`COORD`、`GetStdHandle`、`GetConsoleCursorInfo`等来控制控制台的光标和窗口属性。此外,还介绍了如何利用`GetAsyncKeyState`函数实现键盘监听功能。文中还涉及了`&lt;locale.h&gt;`库的使用,以支持本地化字符显示。
59 1
C语言——实现贪吃蛇小游戏
|
2月前
|
存储 安全 算法
C 语言——实现扫雷小游戏
本文介绍了使用二维数组创建棋盘并实现扫雷游戏的方法。首先,通过初始化数组创建一个9x9的棋盘,并添加行列标识以便操作。接着,利用随机数在棋盘上布置雷。最后,通过判断玩家输入的坐标来实现扫雷功能,包括显示雷的数量和处理游戏胜利或失败的情况。文中提供了完整的代码实现。
45 1
C 语言——实现扫雷小游戏
|
1月前
|
C语言 定位技术 API
【C语言】实践:贪吃蛇小游戏(附源码)(二)
【C语言】实践:贪吃蛇小游戏(附源码)
【C语言】实践:贪吃蛇小游戏(附源码)(二)
|
1月前
|
C语言 开发者
C语言实现猜数字小游戏(详细教程)
C语言实现猜数字小游戏(详细教程)
|
5月前
|
C语言
C语言实现2048小游戏---粤嵌GE6818嵌入式系统实训
C语言实现2048小游戏---粤嵌GE6818嵌入式系统实训
|
1月前
|
C语言
【C语言】实践:贪吃蛇小游戏(附源码)(三)
【C语言】实践:贪吃蛇小游戏(附源码)
|
1月前
|
存储 API C语言
【C语言】实践:贪吃蛇小游戏(附源码)(一)
【C语言】实践:贪吃蛇小游戏(附源码)
|
1月前
|
C语言
C语言贪吃蛇小游戏来啦!
C语言贪吃蛇小游戏来啦!
31 0
|
4月前
|
存储 编译器 C语言