/*******************************************
用最簡單的C語言語句寫個推箱子的程序端三。
********************************************/
#include <stdio.h>?
#include <conio.h>
#include<stdlib.h>
int map[9][11] = {
? ? {0,1,1,1,1,1,1,1,1,1,0},? //0代表空地
? ? {0,1,0,0,0,1,0,0,0,1,0},? //1代表墻
? ? {0,1,0,4,4,4,4,4,0,1,0},? //3代表目的地
? ? {0,1,0,4,0,4,0,4,0,1,1},? //4代表箱子
? ? {0,1,0,0,0,0,0,0,4,0,1},? //5代表人
? ? {1,1,0,1,1,1,1,0,4,0,1},
? ? {1,0,8,3,3,3,3,1,0,0,1},? //2 3 4 5 6 7 8 9 1 0
? ? {1,0,3,3,3,3,3,0,0,1,1},
? ? {1,1,1,1,1,1,1,1,1,1,0} };
//繪制地圖? //二維數(shù)組+switch()
void DrawMap()
{
? ? //遍歷二維數(shù)組? //0 打印空格? //1 墻? //3 目的地? //什么結(jié)構(gòu)?
? ? for (int i = 0; i < 9; i++)
? ? {
? ? ? ? for (int j = 0; j < 11; j++)
? ? ? ? {
? ? ? ? ? ? //if? else? switch
? ? ? ? ? ? switch (map[i][j])
? ? ? ? ? ? {
? ? ? ? ? ? case 0:
? ? ? ? ? ? ? ? printf("? ");
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case 1:
? ? ? ? ? ? ? ? printf("■");
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case 3:
? ? ? ? ? ? ? ? printf("☆");
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case 4:
? ? ? ? ? ? ? ? printf("□");
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case 5:
? ? ? ? ? ? ? ? printf("♀");? //5人
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case 7:? ? //4 + 3? 箱子在目的地中
? ? ? ? ? ? ? ? printf("★");
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case 8:? ? // 5 + 3? 人在目的地當中? 人?
? ? ? ? ? ? ? ? printf("♀");
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? printf("\n");
? ? }
}
void PlayGame()
{
? ? int r, c;? //人的下標? //
? ? for (int i = 0; i < 9; i++)
? ? {
? ? ? ? for (int j = 0; j < 11; j++)
? ? ? ? {
? ? ? ? ? ? if (map[i][j] == 5||map[i][j]==8)? //i j 人的下標?
? ? ? ? ? ? {
? ? ? ? ? ? ? ? r = i;
? ? ? ? ? ? ? ? c = j;
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? char ch;? //字符變量
? ? ch = getch();? //鍵盤的輸入保存到字符中
? ? // getch()? ? getchar()? 接收鍵盤字符
? ? // getch()直接接收 不顯示回文? getchar()顯示回文可以修改 enter鍵結(jié)束
? ? //根據(jù)不同的按鍵? 改變不同的值. 分支.
? ? switch (ch)
? ? {
? ? case 'W':? //W A S D方向? 72? 80? 75? 77 虛擬鍵值 ascii? windowVK_UP VK_TAB VK_RETUNE
? ? case 'w':
? ? case 72:
? ? ? ? if (map[r - 1][c] == 0|| map[r - 1][c] == 3)
? ? ? ? {
? ? ? ? ? ? map[r - 1][c] += 5;
? ? ? ? ? ? map[r][c] -= 5;
? ? ? ? }
? ? ? ? else if (map[r - 1][c] == 4 || map[r - 1][c] == 7)
? ? ? ? {
? ? ? ? ? ? if (map[r - 2][c] == 0 || map[r - 2][c] == 3)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? map[r - 2][c] += 4;
? ? ? ? ? ? ? ? map[r - 1][c] += 1;
? ? ? ? ? ? ? ? map[r][c] -= 5;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? break;
? ? case 'S':? //enter按鍵的作用? 確認 返回
? ? case 's':
? ? case 80:
? ? ? ? if (map[r + 1][c] == 0 || map[r + 1][c] == 3)
? ? ? ? {
? ? ? ? ? ? map[r + 1][c] += 5;
? ? ? ? ? ? map[r][c] -= 5;
? ? ? ? }
? ? ? ? else if (map[r + 1][c] == 4 || map[r+ 1][c] == 7)
? ? ? ? {
? ? ? ? ? ? if (map[r + 2][c] == 0 || map[r + 2][c] == 3)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? map[r + 2][c] += 4;
? ? ? ? ? ? ? ? map[r + 1][c] += 1;
? ? ? ? ? ? ? ? map[r][c] -= 5;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? break;
? ? case 'A':
? ? case 'a':
? ? case 75:
? ? ? ? if (map[r ][c - 1] == 0 || map[r ][c - 1] == 3)
? ? ? ? {
? ? ? ? ? ? map[r ][c - 1] += 5;
? ? ? ? ? ? map[r][c] -= 5;
? ? ? ? }
? ? ? ? else if (map[r][c - 1] == 4 || map[r][c - 1] == 7)
? ? ? ? {
? ? ? ? ? ? if (map[r ][c - 2] == 0 || map[r ][c - 2] == 3)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? map[r ][c - 2] += 4;
? ? ? ? ? ? ? ? map[r ][c - 1] += 1;
? ? ? ? ? ? ? ? map[r][c] -= 5;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? break;
? ? case 'D':
? ? case 'd':
? ? case 77:
? ? ? ? if (map[r][c + 1] == 0 || map[r][c + 1] == 3)
? ? ? ? {
? ? ? ? ? ? map[r][c + 1] += 5;
? ? ? ? ? ? map[r][c] -= 5;
? ? ? ? }
? ? ? ? else if (map[r][c + 1] == 4 || map[r][c + 1] == 7)
? ? ? ? {
? ? ? ? ? ? if (map[r][c + 2] == 0 || map[r][c + 2] == 3)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? map[r][c + 2] += 4;
? ? ? ? ? ? ? ? map[r][c + 1] += 1;
? ? ? ? ? ? ? ? map[r][c] -= 5;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? break;
? ? }
}
//
int main()? //主函數(shù)
{
? ? while (1)
? ? {
? ? ? ? system("cls");
? ? ? ? DrawMap();
? ? ? ? PlayGame();
? ? }
? ? return 0;
}
//通過按鍵來實現(xiàn)游戲? ---> 通過按鍵來改變二維數(shù)組的排列順序.
//思考一個問題? 地圖是二維數(shù)組來決定的. 人在哪里? 二維數(shù)組來決定?
/************************************************
//人推箱子?
可以動.? ? 怎么辦.? 改變元素
? ? ? ? 1.人的前面是空地
? ? ? ? 2.人的前面是目的地
? ? ? ? 3.人的前面是箱子
? ? ? ? ? ? 3.1 箱子的前面是空地
? ? ? ? ? ? 3.2 箱子的前面是目的地
? ? ? ? ? ? //盤斷二維數(shù)組中有幾個7
? ? ? ? ? ? //沒有目的地? 不對..? 人站在目的地
? ? ? ? ? ? //有沒有4.
****************************************/
---------------------