page contents

C语言小游戏——推箱子

/* 推箱子 */ #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<conio.h>  #include<windows.h> //地图数组 int map[9][11] = { { 0, 1, 1, 1, 1, 1,...

/*

推箱子

*/

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

#include<conio.h> 

#include<windows.h>


//地图数组

int map[9][11] = {

{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 },

{ 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0 },

{ 0, 1, 0, 0, 3, 0, 0, 0, 0, 1, 0 },

{ 0, 1, 0, 3, 0, 3, 3, 3, 0, 1, 1 },

{ 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 1 },

{ 1, 1, 0, 0, 1, 1, 1, 0, 3, 0, 1 },

{ 1, 0, 4, 4, 0, 4, 0, 0, 0, 0, 1 },

{ 1, 0, 4, 4, 0, 4, 4, 3, 0, 1, 1 },

{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }

};//原始的图表,9行11列,其中 0 代表着空白的地方; 1 代表着墙;2 代表着人;

//3 代表着箱子;4 代表着箱子的终点位置。 


//图的变化要靠自己来编写数组,通过数字来进行图的构造


int drawmap();//绘图函数

int move();

int IsWin();//胜负判断函数


int main()//主函数 

{

while (1)

{

system("cls");//对其进行清屏 

if(drawmap())

break;

move();


}

puts("游戏结束!\n");

getchar();

return 0;

}


//绘图函数

int drawmap()

{

int i, j;

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

{

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

{

switch (map[i][j])

{

case 0:

printf("  "); //空地

break;

case 1:

printf("▓"); //墙█

break;

case 2:

printf("♀"); //人

break;

case 3:

printf("□"); //箱子★☆

break;

case 4:

printf("◎"); //终点地方

break;

case 6:

printf("♂");//人加终点位置

break;

case 7:

printf("■");//箱子加终点位置

break;

}

}

printf("\n");

}

if (IsWin())//调用输赢的函数 

return 1;

return 0;

}


//移动函数

int move()//小人的移动,整个移动的过程就是数组变化的过程

{

int count, caw = 0;//行和列(小人的坐标)

int i, j, tui;

for (i = 0; i < 9; i++) {

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

{

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

{

count = i;

caw = j;

}

}

}


tui = _getch();

//与getchar()有区别的是:getchar()输入一个字符后需要回车来进行下一个字符的输入,比较麻烦

// getch()则不需要回车就能连续输入多个字符。 


switch (tui)

{//上

case 'W':

case 72:

// 1.人的前面是空地;

// 2.人的前面是终点位置;

// 3.人的前面是箱子

//3.1.箱子的前面是空地;

//3.2.箱子的前面是终点位置。

if (map[count - 1][caw] == 0 || map[count - 1][caw] == 4)

{

map[count][caw] -= 2;

map[count - 1][caw] += 2;

}

else if (map[count - 1][caw] == 3 || map[count - 1][caw] == 7)

{

if (map[count - 2][caw] == 0 || map[count - 2][caw] == 4)

{

map[count][caw] -= 2;

map[count - 1][caw] -= 1;

map[count - 2][caw] += 3;

}

}

break;


//下 

case 'S':

case 80://键值 

if (map[count + 1][caw] == 0 || map[count + 1][caw] == 4)

{

map[count][caw] -= 2;

map[count + 1][caw] += 2;

}


else if (map[count + 2][caw] == 0 || map[count + 2][caw] == 4)

{

if (map[count + 1][caw] == 3 || map[count + 1][caw] == 7)

{

map[count][caw] -= 2;

map[count + 1][caw] -= 1;

map[count + 2][caw] += 3;

}

}

break;

//左 

case 'A':

case 75:

if (map[count][caw - 1] == 0 || map[count][caw - 1] == 4)

{

map[count][caw] -= 2;

map[count][caw - 1] += 2;

}


else if (map[count][caw - 2] == 0 || map[count][caw - 2] == 4)

{

if (map[count][caw - 1] == 3 || map[count][caw - 1] == 7)

{

map[count][caw] -= 2;

map[count][caw - 1] -= 1;

map[count][caw - 2] += 3;

}

}

break;

//右 

case 'D':

case 77:

if (map[count][caw + 1] == 0 || map[count][caw + 1] == 4)

{

map[count][caw] -= 2;

map[count][caw + 1] += 2;

}


else if (map[count][caw + 2] == 0 || map[count][caw + 2] == 4)

{

if (map[count][caw + 1] == 3 || map[count][caw + 1] == 7)

{

map[count][caw] -= 2;

map[count][caw + 1] -= 1;

map[count][caw + 2] += 3;

}

}

break;


}

return 0;

}


//胜负判断函数

int IsWin()

{

int k = 0;//初始化

int j, i;

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

{

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

{

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

k++;

}

}

if (k == 0)

{

printf("恭喜你,你赢了!\n");

return 1;

}


return 0;

}


  • 发表于 2021-05-22 15:14
  • 阅读 ( 710 )
  • 分类:C/C++开发

0 条评论

请先 登录 后评论
小威
小威

64 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1312 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章