1. 程式人生 > >基於VS 2010下圖形庫版本的 C++程式之推箱子

基於VS 2010下圖形庫版本的 C++程式之推箱子

/*** win32控制檯版本的推箱子 ****/
/**********  2017.2.21   make by  qiu **********/


/***牆 1,箱子 4,目的地 3,人 5,空地0 ********/


/*********箱子在目地地 4+3 *****/
/*********人在目地地   5+3 ********/


#include <stdio.h>
#include <graphics.h>  //圖形庫   //TC2.0  VC6.0
#include <mmsystem.h>   //多媒體
#pragma comment(lib,"winmm.lib") //庫檔案
#include <conio.h>     


IMAGE backImage, blankImg, boxImg, peopleImg, darkboxImg, endpointImg, wallImg;


int map[8][8] = { //用不同的數字去表示不同的元素 打印出介面.
{ 0,0,1,1,1,1,0,0 },
{ 0,0,1,3,3,1,0,0 },
{ 0,1,1,0,3,1,1,0 },
{ 0,1,0,0,4,3,1,0 },
{ 1,1,0,4,0,0,1,1 },
{ 1,0,0,1,4,4,0,1 },
{ 1,0,5,0,0,0,0,1 },
{ 1,1,1,1,1,1,1,1 } 
};


void DrawMap();
void PlayGame();
void Game_inti();


//主函式
int main()
{
    initgraph(800,800);
Game_inti();

PlayGame();
return 0;
}


//畫出來
void DrawMap()
{
//for迴圈遍歷二維陣列
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
switch (map[i][j])
{
case 0:  //空地
putimage(i * 100, j * 100, &blankImg);
break;


case 1:
putimage(i * 100, j * 100, &wallImg);
break;


case 3:
putimage(i * 100, j * 100, &endpointImg);
break;


case 4:
putimage(i * 100, j * 100, &boxImg);
break;


case 5:
putimage(i * 100, j * 100, &peopleImg);
break;


case 7:
putimage(i * 100, j * 100, &darkboxImg);
break;


case 8:
putimage(i * 100, j * 100, &peopleImg);
break;
}
}
printf("\n");
}
}


//玩遊戲 原理:不斷改變陣列元素,然後重新列印
void PlayGame()
{
//
char input;
int i, j; //迴圈控制變數
int peoR, peoC;  //人的下標


while (1)
{
cleardevice();
DrawMap();


//確定人的位置
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8; j++)
{
if (map[i][j] == 5 || map[i][j] == 8) //5人 
{
peoR = i;
peoC = j;
}
}
}


printf("(%d %d)", peoR, peoC);


input = getch();
//對不同的鍵盤輸入採取不同的處理 //分支結構
switch (input)
{
case 'W':  //上  WASD  上下左右鍵控制方向
case 'w':
case 72:  //鍵值
//判斷人的前面是空地或者目的地  //改變兩個位置
if (map[peoR][peoC - 1] == 0 || map[peoR][peoC - 1] == 3)
{
map[peoR][peoC - 1] += 5;
map[peoR][peoC] -= 5;
}
//改變三個位置 箱子
else if (map[peoR][peoC - 1] == 4 || map[peoR][peoC - 1] == 7)
{
if (map[peoR][peoC - 2] == 0 || map[peoR][peoC - 2] == 3)
{
map[peoR][peoC - 2] += 4;
map[peoR][peoC - 1] += 1;
map[peoR][peoC] -= 5;
}
}






break;


case 'S':  //下
case 's':
case 80:  //map[peoR + 1][peoC]
//判斷人的前面是空地或者目的地  //改變兩個位置
if (map[peoR][peoC + 1] == 0 || map[peoR][peoC + 1] == 3)
{
map[peoR][peoC + 1] += 5;
map[peoR][peoC] -= 5;
}
//改變三個位置 箱子
else if (map[peoR][peoC + 1] == 4 || map[peoR][peoC + 1] == 7)
{
if (map[peoR][peoC + 2] == 0 || map[peoR][peoC + 2] == 3)
{
map[peoR][peoC + 2] += 4;
map[peoR][peoC + 1] += 1;
map[peoR][peoC] -= 5;
}
}






break;


case 'A':  //map[peoR][peoC - 1]
case 'a':
case 75:
//判斷人的前面是空地或者目的地  //改變兩個位置
if (map[peoR - 1][peoC] == 0 || map[peoR - 1][peoC] == 3)
{
map[peoR - 1][peoC] += 5;
map[peoR][peoC] -= 5;
}
//改變三個位置 箱子
else if (map[peoR - 1][peoC] == 4 || map[peoR - 1][peoC] == 7)
{
if (map[peoR - 2][peoC] == 0 || map[peoR - 2][peoC] == 3)
{
map[peoR - 2][peoC] += 4;
map[peoR - 1][peoC] += 1;
map[peoR][peoC] -= 5;
}
}
break;


case 'D':
case 'd':
case 77:
//判斷人的前面是空地或者目的地  //改變兩個位置
if (map[peoR + 1][peoC] == 0 || map[peoR + 1][peoC] == 3)
{
map[peoR + 1][peoC] += 5;
map[peoR][peoC] -= 5;
}
//改變三個位置 箱子
else if (map[peoR + 1][peoC] == 4 || map[peoR + 1][peoC] == 7)
{
if (map[peoR + 2][peoC] == 0 || map[peoR + 2][peoC] == 3)
{
map[peoR + 2][peoC] += 4;
map[peoR + 1][peoC] += 1;
map[peoR][peoC] -= 5;
}
}
break;
}
}
}
void Game_inti()
{
PlaySound(L"夢中的婚禮.wav", NULL, SND_LOOP | SND_ASYNC | SND_FILENAME); //迴圈播放, 非同步處理, 檔案的名稱
loadimage(&backImage, L"./Image/background.jpg", 800, 800);
loadimage(&blankImg, L"./Image/blank.jpg", 100, 100);
loadimage(&boxImg, L"./Image/box.jpg", 100, 100);
loadimage(&peopleImg, L"./Image/people.jpg", 100, 100);
loadimage(&darkboxImg, L"./Image/Darkbox.jpg", 100, 100);
loadimage(&wallImg, L"./Image/wall.jpg", 100, 100);
loadimage(&endpointImg, L"./Image/EndPoint.jpg", 100, 100);
}

相關推薦

基於VS 2010圖形版本C++程式箱子

/*** win32控制檯版本的推箱子 ****/ /**********  2017.2.21   make by  qiu **********/ /***牆 1,箱子 4,目的地 3,人 5,空地0 ********/ /*********箱子在目地地 4+3 ***

ICTCLAS2016 linux C++版本 使用教程 Eclipse開發C/C++程式標頭檔案,檔案引用

歡迎使用NLPIR/ICTCLAS2014分詞系統 NLPIR分詞系統前身為2000年釋出的ICTCLAS詞法分析系統,從2009年開始,為了和以前工作進行大的區隔,並推廣NLPIR自然語言處理與資訊檢索共享平臺,調整命名為NLPIR分詞系統。張華平博士先後傾力打造十餘

VS 中引入app.manifest(c#程式在win7及以上windows版本以管理員許可權執行方法)

開啟VS2005、VS2008、VS2010、VS2012、VS2013、VS2015工程,檢視工程資料夾中的Properties資料夾下是否有app.manifest這個檔案;如沒有,按如下方式建立:滑鼠右擊工程在選單中選擇“屬性”,點選工程屬性的“安全性”標籤,在安全性

windowsVS code除錯C程式MinGW安裝(參考自官網)

準備工作 1.1 VScode 不累贅了, 官網自行下載. 1.2 C的編譯環境 一般使用MinGW, 先說一種騷操作通過安裝Codeblocks的mingw版會自動安裝需要的MinGW

vs環境動態的製作

1) 開啟vs 新建專案,起的名字不能有中文 2)選擇“DLL” -> 選擇“空專案” 3)寫程式碼 寫程式碼是分檔案寫的xxx.c和xxx.h,只是不需要main()函式測試罷了。你可以重新新建專案,重新寫;或者用之前寫好的程式碼,生成庫:

ZYNQ開發板使用ARM編譯C++程式提示缺少的問題

在UBUNTU下使用交叉編譯器,編譯了C++檔案之後,會生成a.out檔案 之後使用SD卡啟動系統,將檔案放到ZEDBOARD開發板上執行 發現會提示: error while loading shared libraries: libstdc++.so.6:cannot

Vs2005 Vs 2010 安裝破解visual assist x

Visual Assist X\10.6.1833.0 在Visual Studio 2005中的使用說明 第一步:安裝檔案到VS2005的目錄下,確保要選中pre-2010 選項,取消選擇2010,預設情況是都選中的。 等待安裝完成! 第二步 :去安裝目錄下找

關於VS的新建專案及執行C程式的一些問題。

今日開始學習資料結構時又要開始編C語言,之前學習C語言時一直用的DEV_C++,但是DEV_C++畢竟和專業編C語言程式的軟體不同,為了為之後做好準備,還是去下載了VS2015,安裝後發下必須要先建立工程,並且一個工程裡只可以有一個main函式,否則會報錯,看來和DEV_C

CURLC++程式中的運用淺析

  一、LibCurl基本程式設計框架 二、一些基本的函式 三、curl_easy_setopt函式部分選項介紹 四、curl_easy_perform 函式說明(error 狀態碼) 五、libcurl使用的HTTP訊息頭 六、獲取http應答頭資訊 七、多執行緒問題 八、什麼時候l

【VSCode】UbuntuVSCode編譯執行c++程式

之前在Ubuntu下寫一些C++程式,一直找不到一個優(hao)雅(kan)的IDE,所以都是使用vim或Clion來寫。今天發現微軟的一款編輯器,介面好看,功能也挺好用的。 以下是我的一些安裝和配置方法: 1、官網下載地址: https://code.visuals

linux用gcc編譯c程式時遇到的問題: error: stdio.h: 沒有那個檔案或目錄

原因是沒有安裝libc6-dev的軟體包。命令列下輸入apt-get install build-essential即可。這個build-essential是幹什麼的呢?原來build-essential是一個列表,包含了編譯debian包必需的大部分元件。安裝完之後,順利解

在linux編寫簡單的c程式

最近開始學習linux程式設計,對於linux的命令,卻還不特別熟悉,在此記錄一下,學習linux的一些命令首先ctrl+alt+t開啟終端,然後使用vim進行程式設計 vim hello.c 在hello.c中 按下 i 或者 insert 輸入以下內容輸入完成後按 esc

Linux環境使用GDB除錯C程式

寫這篇部落格的目的是因為我剛剛用gdb解決了一個c語言中賦錯了值的問題,導致整個程式的執行結果是不正常的,這是我求助於gdb解決了這個問題,之前也用gdb這個神器解決過一些執行時的記憶體問題,比如說c程式中非常常見的segment error。這篇部落格為了對g

Mac的第一個C++程式—HelloWorld

文章作者:Tyan 部落格:noahsnail.com  |  CSDN  |  簡書 在Windows下習慣了VS編寫C++程式,當然也用命令列編譯過程式,在Mac下沒有裝IDE的情況下,使用終端編寫好了HelloWorld.cpp檔案之後,不知道如何在M

win 使用GCC 寫 C 程式

1.下載MinGW。 GCC,GNU Compiler Collection,一個原本用於Unix系統下程式設計的編譯器。 現在GCC也有了許多Win32下的移植版本。目前GCC在windows

在Linux系統編譯並執行C++程式

引言 為什麼要在Linux下寫程式? 首先要問一下自己,為什麼要寫這個程式。 如果我們寫一個執行在windows平臺的應用程式,那麼用Linux寫肯定是傻瓜或者強迫症,因為在windows平臺除錯windows程式可以更容易發現並解決問題,反過來也一樣,在

C程式儲存方式與區別

malloc 函式返回的是 void * 型別,如果你寫成:p = malloc (sizeof(int)); 則程式無法通過編譯,報錯:“不能將 void* 賦值給 int * 型別變數”。所以必須通過 (int *) 來將強制轉換。   第二、函式的實參為 sizeof(int) ,用於指

C++寫的箱子小遊戲2.2(支援步數顯示,回撤,穿牆,闖關,輸入等功能)

歡迎來到jiedai的推箱子。 jiedai用C++寫的推箱子游戲支援步數顯示,回撤,穿牆,闖關,輸入等操作。 1.1的更新增加了步數的輸出,對玩家移動的箭頭進行了改進。 1.2的更新推出了小編提供的地圖,希望大家遊戲愉快。 1.3的更新修正了除錯過程中的bug。 經過玩家

c/c++程式_KMP字串模式匹配詳解(非常不錯的詳解)

  KMP字串模式匹配通俗點說就是一種在一個字串中定位另一個串的高效演算法。簡單匹配演算法的時間複雜度為O(m*n);KMP匹配演算法。可以證明它的時間複雜度為O(m+n).。 一.  簡單匹配演算法 先來看一個簡單匹配演算法的函式: int Index_BF ( char S [ ], char T

C++ 小遊戲箱子

做完C的貪吃蛇遊戲後,感覺還不錯,剛好記得在HDU上做過一道關於推箱子游戲的演算法題目,即雙BFS。 所以我決定來做做C++的小遊戲推箱子,由於剛學C++,對C++還是不很熟練,但是思路還是很清楚的, 編寫程式碼還是很舒服的。! 現在晒晒我的程式碼和詳細解釋,希望多交流~