c語言控制檯推箱子小遊戲
這是最早編寫的一個小程式,程式設計思路源於網路。
用CodeBlocks16.01編繹通過。關卡設計參考易語言例程,十八個關卡的陣列初始值,看圖手工填寫了兩個多小時。
或許是很笨辦法,高手請多指教。
程式設計思路:
一 二維陣列指定物件的位置和種類。
二 雙快取消除螢幕閃爍。
三 核心程式碼 switch語句計算出字元的邏輯變化。
有了思路,程式碼就容易寫了,下面是介面圖:
十八關圖,好多箱子,眼都花了,對得起推箱仙人的稱號:
主程式程式碼:
/********************************
名稱:推箱子
描述:用控制檯程式實現推箱子小遊戲
編譯:codeblocks16.01 vs2010
建立:零千刻
日期:170502
*********************************/
#include <windows.h>//Sleep(100)
#include <stdlib.h>//system()
#include <stdio.h>
#include <conio.h> //getch需要
extern int map1[14][16], map2[14][16], map3[14][16], map4[14][16],map5[14][16],
map6[14][16], map7[14][16], map8[14][16],map9[14][16], map10[14][16],
map11[14][16], map12[14][16],map13[14][16], map14[14][16], map15[14][16],
map16[14][16],map17[14][16], map18[14][16];
void DrawMap();
void PlayGame();
void TextManage();
void DrawMapBase();
void nextMap();
void TextChange();
void stopFlash();
HANDLE hOutput;
HANDLE hOutBuf;
COORD coord= {0,0}; //COORD是Windows API中定義的一種結構,表示一個字元在控制檯螢幕上的座標。
int stra=strlen("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
int map[14][16]= {};
bool mapNumWait=true;//地圖關卡數
int mapNumGoing=1;//地圖關卡數
int mapNumGoingC=1;//地圖關卡數副本
bool nextm=true;
bool textc=false;
bool nextK=true;
int iox=0;
int jox=0;
char data[720];//控制檯預設一行為80個半形字元,
DWORD bytes=0;
int main()
{
//獲取預設標準顯示緩衝區控制代碼
hOutput=GetStdHandle(STD_OUTPUT_HANDLE);
// 獲取標準輸出裝置控制代碼
//CONSOLE_SCREEN_BUFFER_INFO bInfo; // 視窗緩衝區資訊
//GetConsoleScreenBufferInfo(hOutput, bInfo );
// 獲取視窗緩衝區資訊
//char strTitle[255];
//GetConsoleTitle(strTitle, 255); // 獲取視窗標題
//printf("當前視窗標題是:%s\n", strTitle);
//_getch();
SetConsoleTitle(TEXT("推箱子")); // 獲取視窗標題
//_getch();
COORD size = {80-20, 25+2};
SetConsoleScreenBufferSize(hOutput,size); // 重新設定緩衝區大小
//_getch();
SMALL_RECT rc = {0,0, 80-20, 25+2}; // 重置視窗位置和大小
SetConsoleWindowInfo(hOutput,true,&rc);
//CloseHandle(hOutput); // 關閉標準輸出裝置控制代碼
//建立新的緩衝區
hOutBuf = CreateConsoleScreenBuffer(
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
CONSOLE_TEXTMODE_BUFFER,
NULL
);
//設定新的緩衝區為活動顯示緩衝
SetConsoleActiveScreenBuffer(hOutBuf);
//隱藏兩個緩衝區的游標
CONSOLE_CURSOR_INFO cci;
cci.bVisible=0;
cci.dwSize=1;
SetConsoleCursorInfo(hOutput, &cci);
SetConsoleCursorInfo(hOutBuf, &cci);
//雙緩衝處理顯示
SetConsoleTextAttribute(hOutBuf,0|11);
TextManage();
while (1)
{
stopFlash();
DrawMapBase();
DrawMap();
ReadConsoleOutputCharacterA(hOutBuf, data, 720, coord, &bytes);
Sleep(30);
WriteConsoleOutputCharacterA(hOutput, data,720, coord, &bytes);
nextMap();//函式呼叫順序很重要,若放最後,會有推箱未完就換圖之狀
TextChange();
PlayGame();
}
return 0;
}
void DrawMapBase()
{
if(mapNumWait)//bool判斷中勿再賦值
{
for(int m=0; m<14; m++)
{
for(int n=0; n<16; n++)
{
switch(mapNumGoing)
{
case 1:
map[m][n]=map1[m][n];
break;
case 2:
map[m][n]=map2[m][n];
break;
case 3:
map[m][n]=map3[m][n];
break;
case 4:
map[m][n]=map4[m][n];
break;
case 5:
map[m][n]=map5[m][n];
break;
case 6:
map[m][n]=map6[m][n];
break;
case 7:
map[m][n]=map7[m][n];
break;
case 8:
map[m][n]=map8[m][n];
break;
case 9:
map[m][n]=map9[m][n];
break;
case 10:
map[m][n]=map10[m][n];
break;
case 11:
map[m][n]=map11[m][n];
break;
case 12:
map[m][n]=map12[m][n];
break;
case 13:
map[m][n]=map13[m][n];
break;
case 14:
map[m][n]=map14[m][n];
break;
case 15:
map[m][n]=map15[m][n];
break;
case 16:
map[m][n]=map16[m][n];
break;
case 17:
map[m][n]=map17[m][n];
break;
case 18:
map[m][n]=map18[m][n];
break;
}
}
}
mapNumWait=false;
}
}
void DrawMap()
{
//用for迴圈遍歷二維陣列
for(int i=0; i<14; i++)
{
coord.X =2;
coord.Y =i+4;
SetConsoleCursorPosition( hOutBuf, coord );
for(int j=0; j<16; j++)
{
switch(map[i][j])
{
case 0:
//printf(" ");//空兩格對應一個全形符
WriteConsole(hOutBuf, " ", strlen(" "), NULL, NULL);
break;
case 1:
//printf("■");
WriteConsole(hOutBuf, "■", strlen("■"), NULL, NULL);
break;
case 3:
//printf("◎");
WriteConsole(hOutBuf, "+", strlen("+"), NULL, NULL);
break;
case 4:
//printf("□");
WriteConsole(hOutBuf, "□", strlen("□"), NULL, NULL);
break;
case 5:
//printf("♀");
WriteConsole(hOutBuf, "♀", strlen("♀"), NULL, NULL);
break;
case 7:
//printf("¤");
WriteConsole(hOutBuf, "¤", strlen("¤"), NULL, NULL);
break; //若不用break則執行case8打印出"♀" 出錯!
case 8:
//printf("♀");
WriteConsole(hOutBuf, "♀", strlen("♀"), NULL, NULL);
break;
}
}
//printf("\n");
WriteConsole(hOutBuf, "\n", strlen("\n"), NULL, NULL);
coord.X =2;
coord.Y =4;
}
}
void PlayGame()
{
char ch;
int pRow,pCol;//人的行和列
int i,j;
//時時刻刻得到人的下標,
for (i=0; i<14; i++)
{
for(j=0; j<16; j++)
{
if(map[i][j]==5||map[i][j]==8)
{
pRow=i;
pCol=j;
break;//此break只能跳出第一個for迴圈
}
}
if(map[i][j]==5||map[i][j]==8)//此句跳出第二個for迴圈 不可有goto語句
break;
}
ch=getch();//getchar()接收字元,顯示迴文件 在按下回車的時候結束。
//getch()接收字元 不顯示迴文件直接接收。
switch(ch)
{
case 'W':
case 'w':
case 72:
if(map[pRow-1][pCol]==0||map[pRow-1][pCol]==3)
{
map[pRow-1][pCol]+=5;
map[pRow][pCol]-=5;
}
else if(map[pRow-1][pCol]==4||map[pRow-1][pCol]==7)//人的前面是箱子
{
if(map[pRow-2][pCol]==0||map[pRow-2][pCol]==3)//判斷箱子的前面為空或目標
{
map[pRow-2][pCol]+=4;
map[pRow-1][pCol]+=1;
map[pRow][pCol]-=5;
}
}
break;
case 'S':
case 's':
case 80:
if(map[pRow+1][pCol]==0||map[pRow+1][pCol]==3)
{
map[pRow+1][pCol]+=5;
map[pRow][pCol]-=5;
}
else if(map[pRow+1][pCol]==4||map[pRow+1][pCol]==7)
{
if(map[pRow+2][pCol]==0||map[pRow+2][pCol]==3)
{
map[pRow+2][pCol]+=4;
map[pRow+1][pCol]+=1;
map[pRow][pCol]-=5;
}
}
break;
case 'A':
case 'a':
case 75:
if(map[pRow][pCol-1]==0||map[pRow][pCol-1]==3)
{
map[pRow][pCol-1]+=5;
map[pRow][pCol]-=5;
}
else if(map[pRow][pCol-1]==4||map[pRow][pCol-1]==7)
{
if(map[pRow][pCol-2]==0||map[pRow][pCol-2]==3)
{
map[pRow][pCol-2]+=4;
map[pRow][pCol-1]+=1;
map[pRow][pCol]-=5;
}
}
break;
case 'D':
case 'd':
case 77:
if(map[pRow][pCol+1]==0||map[pRow][pCol+1]==3)
{
map[pRow][pCol+1]+=5;
map[pRow][pCol]-=5;
}
else if(map[pRow][pCol+1]==4||map[pRow][pCol+1]==7)
{
if(map[pRow][pCol+2]==0||map[pRow][pCol+2]==3)
{
map[pRow][pCol+2]+=4;
map[pRow][pCol+1]+=1;
map[pRow][pCol]-=5;
}
}
break;
case '=':
mapNumGoing=mapNumGoingC;
mapNumWait=true;
nextm=true;
iox=0;
break;
case 0xe://0xe是ctrl+N的鍵值
nextK=false;
jox=iox;
break;
default:
break;;
}
return;
}
void nextMap()
{
if(nextm)
{
for(int m=0; m<14; m++)
{
for(int n=0; n<16; n++)
{
if(map[m][n]==3||map[m][n]==7)
{
iox++;
}
}
}
nextm=false;
}
if(nextK)
{
jox=0;
for(int i=0; i<14; i++)
{
for(int j=0; j<16; j++)
{
if(map[i][j]==7)
{
jox++;
}
}
}
}
if(jox==iox)
{
if(mapNumGoing<18)
{
mapNumGoing++;
}
mapNumGoingC=mapNumGoing;
mapNumWait=true;
nextm=true;
nextK=true;
iox=0;
textc=true;
Sleep(2000);
DrawMapBase();
DrawMap();
ReadConsoleOutputCharacterA(hOutBuf, data, 720, coord, &bytes);
Sleep(30);
WriteConsoleOutputCharacterA(hOutput, data,720, coord, &bytes);
nextMap();//函式呼叫順序很重要,若放最後,會有推箱未完就換圖之狀
TextChange();
}
}
void TextManage()
{
WriteConsole(hOutBuf, "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n", stra, NULL, NULL);
WriteConsole(hOutBuf, "┃************************推箱子**************************┃\n", stra, NULL, NULL);
WriteConsole(hOutBuf, "┣━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┫\n", stra, NULL, NULL);
for(int h=0; h<15; h++)
{
WriteConsole(hOutBuf, "┃ ┃ ┃\n", stra, NULL, NULL);
}
WriteConsole(hOutBuf, "┣━━━━━━━━━━━━━━━━┻━━━━━━━━━━━┫\n", stra, NULL, NULL);
WriteConsole(hOutBuf, "┃推箱程序:推箱新手,開始吧!生命不息,推箱不止! ┃\n", stra, NULL, NULL);
WriteConsole(hOutBuf, "┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n", stra, NULL, NULL);
WriteConsole(hOutBuf, "┃遊戲操作:按下“=”鍵,重新開始當前關 ┃\n", stra, NULL, NULL);
WriteConsole(hOutBuf, "┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n", stra, NULL, NULL);
WriteConsole(hOutBuf, "┃作 者:零千刻****************************************┃\n", stra, NULL, NULL);
WriteConsole(hOutBuf, "┃程式碼要點:關卡框架;控制檯消除閃爍。********************┃\n", stra, NULL, NULL);
WriteConsole(hOutBuf, "┃關卡設計:參考易語言例程推箱子;程式碼:參考網路資源******┃\n", stra, NULL, NULL);
WriteConsole(hOutBuf, "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛", stra, NULL, NULL);
coord.X =36;
coord.Y =4;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "關卡:第 一 關", strlen("關卡:第 一 關"), NULL, NULL);
coord.Y =6;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "稱號:推箱新手", strlen( "稱號:推箱新手"), NULL, NULL);
//新手,識途,有成,悟心,得道,仙人
coord.Y =8;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "操作:按鍵WSAD或wsad", strlen("操作:按鍵WSAD或wsad"), NULL, NULL);
coord.Y =9;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, " 或↑↓→←", strlen(" 或↑↓→←"), NULL, NULL);
coord.Y =11;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "說明:所有 □ 推至 十", strlen("說明:所有 □ 推至 十"), NULL, NULL);
coord.Y =12;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, " 共十八關,難度遞增", strlen(" 共十八關,難度遞增"), NULL, NULL);
coord.Y =13;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, " 目標達成,推箱仙人", strlen(" 目標達成,推箱仙人"), NULL, NULL);
coord.Y =15;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "激勵:做得到,做得好!", strlen( "激勵:做得到,做得好!"), NULL, NULL);
}
void stopFlash()
{
coord.X =52;
coord.Y =4;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, " ", strlen(" "), NULL, NULL);//初行閃爍,用空代替。防閃
}
void TextChange()
{
if(textc)
{
switch(mapNumGoing)
{
case 2:
coord.X =44;
coord.Y =4;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, " 二", strlen(" 二"), NULL, NULL);
coord.X =36;
coord.Y =6;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "稱號:推箱識途", strlen( "稱號:推箱識途"), NULL, NULL);
coord.X =12;
coord.Y =19;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf,"推箱識途,好的開始,向前向前! ", strlen( "推箱識途,好的開始,向前向前! "), NULL, NULL);
break;
case 3:
coord.X =44;
coord.Y =4;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, " 三", strlen(" 三"), NULL, NULL);
coord.X =36;
coord.Y =6;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "稱號:推箱識途", strlen( "稱號:推箱識途"), NULL, NULL);
coord.X =12;
coord.Y =19;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf,"推箱識途,略有進步,努力努力! ", strlen( "推箱識途,好的開始,向前向前! "), NULL, NULL);
break;
case 4:
coord.X =44;
coord.Y =4;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, " 四", strlen(" 四"), NULL, NULL);
coord.X =36;
coord.Y =6;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "稱號:推箱識途", strlen( "稱號:推箱識途"), NULL, NULL);
coord.X =12;
coord.Y =19;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf,"推箱識途,大有進步,向前向前! ", strlen( "推箱識途,好的開始,向前向前! "), NULL, NULL);
break;
case 5:
coord.X =44;
coord.Y =4;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, " 五", strlen(" 五"), NULL, NULL);
coord.X =36;
coord.Y =6;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "稱號:推箱識途", strlen( "稱號:推箱識途"), NULL, NULL);
coord.X =12;
coord.Y =19;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf,"推箱識途,即將升級,過關過關! ", strlen( "推箱識途,好的開始,向前向前! "), NULL, NULL);
break;
case 6:
coord.X =44;
coord.Y =4;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, " 六", strlen(" 六"), NULL, NULL);
coord.X =36;
coord.Y =6;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "稱號:推箱有成", strlen( "稱號:推箱識途"), NULL, NULL);
coord.X =12;
coord.Y =19;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf,"推箱有成,不忘初心,方得始終! ", strlen( "推箱識途,好的開始,向前向前! "), NULL, NULL);
break;
case 7:
coord.X =44;
coord.Y =4;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, " 七", strlen(" 六"), NULL, NULL);
coord.X =36;
coord.Y =6;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "稱號:推箱有成", strlen( "稱號:推箱識途"), NULL, NULL);
coord.X =12;
coord.Y =19;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf,"推箱有成,萬里長城推不倒! ", strlen( "推箱識途,好的開始,向前向前! "), NULL, NULL);
break;
case 8:
coord.X =44;
coord.Y =4;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, " 八", strlen(" 六"), NULL, NULL);
coord.X =36;
coord.Y =6;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "稱號:推箱有成", strlen( "稱號:推箱識途"), NULL, NULL);
coord.X =12;
coord.Y =19;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf,"推箱有成,千里黃河水滔滔! ", strlen( "推箱識途,好的開始,向前向前! "), NULL, NULL);
break;
case 9:
coord.X =44;
coord.Y =4;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, " 九", strlen(" 六"), NULL, NULL);
coord.X =36;
coord.Y =6;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "稱號:推箱有成", strlen( "稱號:推箱識途"), NULL, NULL);
coord.X =12;
coord.Y =19;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf,"推箱有成,江山秀麗,疊彩峰嶺! ", strlen( "推箱識途,好的開始,向前向前! "), NULL, NULL);
break;
case 10:
coord.X =44;
coord.Y =4;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, " 十", strlen(" 六"), NULL, NULL);
coord.X =36;
coord.Y =6;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "稱號:推箱悟心", strlen( "稱號:推箱識途"), NULL, NULL);
coord.X =12;
coord.Y =19;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf,"推箱悟心,天地任我行,實力在先! ", strlen( "推箱識途,好的開始,向前向前! "), NULL, NULL);
break;
case 11:
coord.X =44;
coord.Y =4;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "十一", strlen(" 六 "), NULL, NULL);
coord.X =36;
coord.Y =6;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "稱號:推箱悟心", strlen( "稱號:推箱識途"), NULL, NULL);
coord.X =12;
coord.Y =19;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf,"推箱悟心,推箱不語,正悟心得! ", strlen( "推箱識途,好的開始,向前向前! "), NULL, NULL);
break;
case 12:
coord.X =44;
coord.Y =4;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "十二", strlen(" 六 "), NULL, NULL);
coord.X =36;
coord.Y =6;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "稱號:推箱悟心", strlen( "稱號:推箱識途"), NULL, NULL);
coord.X =12;
coord.Y =19;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf,"推箱悟心,新的境界,感悟期待! ", strlen( "推箱識途,好的開始,向前向前! "), NULL, NULL);
break;
case 13:
coord.X =44;
coord.Y =4;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "十三", strlen(" 六 "), NULL, NULL);
coord.X =36;
coord.Y =6;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "稱號:推箱得道", strlen( "稱號:推箱識途"), NULL, NULL);
coord.X =12;
coord.Y =19;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf,"推箱得道,道可道,非常道,莫言! ", strlen( "推箱識途,好的開始,向前向前! "), NULL, NULL);
break;
case 14:
coord.X =44;
coord.Y =4;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "十四", strlen(" 六 "), NULL, NULL);
coord.X =36;
coord.Y =6;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "稱號:推箱得道", strlen( "稱號:推箱識途"), NULL, NULL);
coord.X =12;
coord.Y =19;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf,"推箱得道,一生二,二生三,三生萬物! ", strlen( "推箱識途,好的開始,向前向前! "), NULL, NULL);
break;
case 15:
coord.X =44;
coord.Y =4;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "十五", strlen(" 六 "), NULL, NULL);
coord.X =36;
coord.Y =6;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "稱號:推箱得道", strlen( "稱號:推箱識途"), NULL, NULL);
coord.X =12;
coord.Y =19;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf,"推箱得道,若要昇仙,先過此關! ", strlen( "推箱識途,好的開始,向前向前! "), NULL, NULL);
break;
case 16:
coord.X =44;
coord.Y =4;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "十六", strlen(" 六 "), NULL, NULL);
coord.X =36;
coord.Y =6;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "稱號:推箱仙人", strlen( "稱號:推箱識途"), NULL, NULL);
coord.X =12;
coord.Y =19;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf,"推箱仙人,有仙術,ctrl+ n 跳到下一關!! ", strlen( "推箱識途,好的開始,向前向前! "), NULL, NULL);
break;
case 17:
coord.X =44;
coord.Y =4;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "十七", strlen(" 六 "), NULL, NULL);
coord.X =36;
coord.Y =6;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "稱號:推箱仙人", strlen( "稱號:推箱識途"), NULL, NULL);
coord.X =12;
coord.Y =19;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf,"推箱仙人,飛昇雲天,勝利在望! ", strlen( "推箱識途,好的開始,向前向前! "), NULL, NULL);
break;
case 18:
coord.X =44;
coord.Y =4;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "十八", strlen(" 六 "), NULL, NULL);
coord.X =36;
coord.Y =6;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf, "稱號:推箱仙人", strlen( "稱號:推箱識途"), NULL, NULL);
coord.X =12;
coord.Y =19;
SetConsoleCursorPosition( hOutBuf, coord );
WriteConsole(hOutBuf,"推箱仙人,天地變色,眾生膜拜! ", strlen( "推箱識途,好的開始,向前向前! "), NULL, NULL);
break;
}
textc=false;
}
}
地圖檔案,只貼一關,做測試用:
//mapfile.cpp
int map1[14][16]=
{
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,1,1,1,1,1,0,0,0,0,0,0,0},//0空白
{0,0,1,0,0,0,1,0,0,0,0,0,0,0},//1牆
{0,0,1,0,4,0,1,0,1,1,1,0,0,0},//3目標
{0,0,1,0,4,5,1,0,1,3,1,0,0,0},//4箱子
{0,0,1,1,1,4,1,1,1,3,1,0,0,0},//5角色
{0,0,0,1,1,0,0,0,0,3,1,0,0,0},
{0,0,0,1,0,0,0,1,0,0,1,0,0,0},
{0,0,0,1,0,0,0,1,1,1,1,0,0,0},
{0,0,0,1,1,1,1,1,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};
更多關卡參見完整專案資源,完整專案程式碼資源參見以下連結:
有很奇怪的問題請教高人,
在CodeBlocks中編繹時,為什麼release能通過,而debug卻不能通過?
無意中發現的,找不到原因,好糾結!
程式有小bug,跳關後,有時程式會失靈,請高人指教!!