文章目錄
- 1效果展示
- 2:設計程序
- 3代碼
1效果展示

2:設計程序



3代碼
#include "game.h"
void ShowMap(char arr[][LINE])//列印地圖
{
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < LINE; j++)
{
if (arr[i][j] == 0)
printf("■");//列印墻壁
else if (arr[i][j] == 1)//列印空白
printf(" ");
else if (arr[i][j] == 2)//列印箱子
printf("●");
else if (arr[i][j] == 3)//列印目的點
printf("¤");
else if (arr[i][j] == 4)
printf("♀");
}
printf("\n");
}
}
void Move(char arr[][LINE],int *row,int *line)//移動小人兒
{
while (1)
{
int newrow = *row;
int newline = *line;
int quit = 0;
printf("請通過w,s,a,d,控制上下左右\n");
int move=0;
int c = 0;
while (!quit)
{
move = getchar();//從標準輸入讀取字符
while((c=getchar())!='\n');//吃掉多余的字符以及空格
switch (move)
{
case 'w':
newrow--;//向上移動
quit = 1;
break;
case 's':
newrow++;//向下移動
quit = 1;
break;
case 'a':
newline--;//向左移動
quit = 1;
break;
case 'd':
newline++;//向右移動
quit = 1;
break;
default:
printf("輸入有誤,請從新輸入\n");
break;
}
}
if (arr[newrow][newline] == 0 || arr[newrow][newline]==3)//下一個坐標為墻壁或者目標點
{
printf("禁止前行\n");
}
else//前面為空白,箱子,或者目標點
{
if (arr[newrow][newline] == 1)//為空白
{
arr[newrow][newline]= 4;//將小人移動到坐標點
arr[*row][*line]= 1;//小人的地方變為空白
*row = newrow;
*line = newline;
break;
}
else if (arr[newrow][newline] == 2)//下一個目標點為箱子
{
int nextrow = newrow;
int nextline = newline;
if (move == 'w')//上
nextrow = newrow - 1;
else if (move == 's')//下
nextrow = newrow + 1;
else if (move == 'a')//左
nextline = newline - 1;
else//右
nextline = newline + 1;
if (arr[nextrow][nextline] == 0 || arr[nextrow][nextline] == 2)//箱子前面是墻壁或者箱子
printf("移動不了,箱子前方有障礙\n");
else//箱子前面不是墻壁
{
arr[nextrow][nextline]= 2;//箱子前挪
arr[newrow][newline]= 4;//箱子位置變為人
arr[*row][*line]= 1;//小人的地方變為空白
*row = newrow;
*line = newline;
break;
}
}
}
}
}
void Judge(char arr[][LINE],int *boxs)
{
int temp = 0;
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < LINE; j++)
{
if (arr[i][j] == 3)//剩余目標點數
temp++;
}
}
*boxs = temp;
}
void Game()
{
char arr[10][10] = { //0位墻壁■,1位空白,2為箱子●,3為目的點¤,4為人♀
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 3, 1, 0, 0, 0, 1, 0, 0 },
{ 0, 0, 1, 1, 1, 1, 1, 3, 1, 0 },
{ 0, 1, 1, 1, 2, 1, 1, 1, 0, 0 },
{ 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 },
{ 0, 1, 2, 1, 0, 1, 2, 0, 0, 0 },
{ 0, 0, 0, 1, 1, 1, 1, 1, 0, 0 },
{ 0, 0, 0, 1, 1, 1, 1, 1, 3, 0 },
{ 0, 3, 1, 2, 1, 4, 1, 1, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};//初始化地圖
ShowMap(arr);
int row = 8, line = 5;//小人初始橫縱坐標
int boxs= 4;//還未到達目標點的盒子數
while (boxs)
{
Move(arr, &row, &line);//移動小人
system("cls");
ShowMap(arr);
Judge(arr, &boxs);//剩余目標點數
if (boxs == 0)
printf("恭喜你,通關成功\n");
}
}
#ifndef _GAME_H_
#define _GAME_H_
#include <stdio.h>
#include <windows.h>
#define ROW 10
#define LINE 10
void Game();
#endif
#include "game.h"
int main()
{
Game();
system("pause");
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/234963.html
標籤:其他
上一篇:游戲開發中的插補
下一篇:2020 icpc 上海 云游記
