[C] 纯文本查看 复制代码
#include <graphics.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include<bits/stdc++.h>
using namespace std;
key_msg keyMsg;
int pass;// ¹Ø¿¨Êý
int wx,wy;//ÀǵÄλÖÃ
//ͼƬÎļþλÖÃ
PIMAGE pimgs[9];
const char* imgFiles[9] = {
"PIC\\floor.png",
"PIC\\wall.png",
"PIC\\tree.png",
"PIC\\destPoint.png",
"PIC\\box.png",
"PIC\\wolf.png",
"PIC\\bg.png",
"PIC\\1.png",
"PIC\\title.png"
};
int map0[10][10]={0}; //¿ÕµØÍ¼
//0¿ÕµØ 1ǽ 2Ê÷ 3Ä¿µÄµØ 4Ïä×Ó 5ÈË 7Ïä×ÓºÍÄ¿µÄµØÖØºÏ 8È˺ÍÄ¿µÄµØÖغÏ
int map1[10][10] = {
{ 2,2,1,1,1,2,2,2 },
{ 2,2,1,3,1,2,2,2 },
{ 2,2,1,0,1,1,1,1 },
{ 1,1,1,0,0,4,3,1 },
{ 1,3,4,4,0,1,1,1 },
{ 1,1,1,5,4,1,2,2 },
{ 2,2,2,1,3,1,2,2 },
{ 2,2,2,1,1,1,2,2 }
};
//µØÍ¼ 2£¨¹Ø¿¨2£©
int map2[10][10]={
{1,1,1,1,1,2,2,2,2,2},
{1,5,0,0,1,2,2,2,2,2},
{1,0,4,4,1,2,1,1,1,2},
{1,0,4,0,1,2,1,3,1,2},
{1,1,1,0,1,1,1,3,1,2},
{2,1,1,0,0,0,0,3,1,2},
{2,1,0,0,0,1,0,0,1,2},
{2,1,0,0,0,1,1,1,1,2},
{2,1,1,1,1,1,2,2,2,2}
};
//µØÍ¼ 3£¨¹Ø¿¨3£©
int map3[10][10]={
{ 2,2,2,1,1,1,1,1,1,1 },
{ 2,2,1,1,0,0,1,0,5,1 },
{ 2,2,1,0,0,0,1,0,0,1 },
{ 2,2,1,4,0,4,0,4,0,1 },
{ 2,2,1,0,4,1,1,0,0,1 },
{ 1,1,1,0,4,0,1,0,1,1 },
{ 1,3,3,3,3,3,0,0,1,2 },
{ 1,1,1,1,1,1,1,1,1,2 },
};
void loadImage()//Í¼Æ¬ÔØÈë
{
for (int i = 0; i < 9; i++)
{
pimgs[i] = newimage();
getimage(pimgs[i], imgFiles[i]);
}
}
void start()//³õʼ»¯
{
initgraph(350, 350);//ÉèÖô°¿Ú´óС//ͼÐγõʼ»¯
setbkcolor(WHITE);
loadImage();//Í¼Æ¬ÔØÈë
setcolor(RED); //ÉèÖûͼÏßΪºìÉ«
setfont(100,0,"Ó×Ô²");//(×ÖÌå¸ß¶È,×ÖÌå¿í¶È(Ϊ0¼´Îª×ÔÊÊÓ¦),×ÖÐÎ)ÉèÖÃ×ÖÌåΪ25,Ó×Ô²×ÖÌå
setbkmode(TRANSPARENT); //ÉèÖÃÎÄ×Ö±³¾°É«ÎªÍ¸Ã÷(ĬÈÏΪÓб³¾°É«)
pass=1;
}
void draw()//ͼÐλæÖÆ
{
for (int x = 0; x < 10; x++)
for (int y = 0; y < 10; y++)
{
if(map0[x][y]==3) putimage_withalpha(NULL, pimgs[3], y * 35, x * 35);//ÏÈ»µØÃæ ·ÀÕÚµ²
else putimage_withalpha(NULL, pimgs[0], y * 35, x * 35);//ÏÈ»µØÃæ ·ÀÕÚµ²
}
for (int x = 0; x < 10; x++)
for (int y = 0; y < 10; y++)
{
if((map0[x][y]==7)|| (map0[x][y]==8))
{
putimage_withalpha(NULL, pimgs[map0[x][y]-3], y * 35, x * 35);
}
else if((map0[x][y]!=0)&&(map0[x][y]!=3))
putimage_withalpha(NULL, pimgs[map0[x][y]], y * 35, x * 35);
}
}
bool judgeOver()
{
for(int i=9;i>=0;i--)
for(int j=9;j>=0;j--)
{
if((map0[i][j]==3)||(map0[i][j]==8))
return false;
}
return true;
}
void update()//Êý¾Ý¸üÐÂ
{
for(int i = 0; i < 10; i++)
for(int j = 0; j < 10; j++){
if(map0[i][j] == 5 || map0[i][j] == 8){
wx = i;
wy = j;
break;
}
}
switch(keyMsg.key)
{
case 'W':
if(map0[wx-1][wy] == 0 || map0[wx-1][wy] == 3)//¿ÕµØ»òÄ¿µÄµØ
{
map0[wx][wy] -= 5;//»¹Ô
map0[wx-1][wy] += 5;//ÈËÒÆ¶¯
}
else if(map0[wx-1][wy] == 4 || map0[wx-1][wy] == 7)//Ïä×Ó
{
if(map0[wx-2][wy] == 0 || map0[wx-2][wy] == 3)//ÉÏÃæÊǿյÄ
{
map0[wx][wy] -= 5;
map0[wx-1][wy] += 1;//Ä¿±êλÖñäΪÈË
map0[wx-2][wy] += 4;//Ïä×ÓÒÆÎ»
}
}
break;
case 'A':
if(map0[wx][wy-1] == 0 || map0[wx][wy-1] == 3)//¿ÕµØ»òÄ¿µÄµØ
{
map0[wx][wy] -= 5;//»¹Ô
map0[wx][wy-1] += 5;//ÈËÒÆ¶¯
}
else if(map0[wx][wy-1] == 4 || map0[wx][wy-1] == 7)//Ïä×Ó
{
if(map0[wx][wy-2] == 0 || map0[wx][wy-2] == 3)//ÉÏÃæÊǿյÄ
{
map0[wx][wy] -= 5;
map0[wx][wy-1] += 1;//Ä¿±êλÖñäΪÈË
map0[wx][wy-2] += 4;//Ïä×ÓÒÆÎ»
}
}
break;
case 'S':
if(map0[wx+1][wy] == 0 || map0[wx+1][wy] == 3)//¿ÕµØ»òÄ¿µÄµØ
{
map0[wx][wy] -= 5;//»¹Ô
map0[wx+1][wy] += 5;//ÈËÒÆ¶¯
}
else if(map0[wx+1][wy] == 4 || map0[wx+1][wy] == 7)//Ïä×Ó
{
if(map0[wx+2][wy] == 0 || map0[wx+2][wy] == 3)//ÉÏÃæÊǿյÄ
{
map0[wx][wy] -= 5;
map0[wx+1][wy] += 1;//Ä¿±êλÖñäΪÈË
map0[wx+2][wy] += 4;//Ïä×ÓÒÆÎ»
}
}
break;
case 'D':
if(map0[wx][wy+1] == 0 || map0[wx][wy+1] == 3)//¿ÕµØ»òÄ¿µÄµØ
{
map0[wx][wy] -= 5;//»¹Ô
map0[wx][wy+1] += 5;//ÈËÒÆ¶¯
}
else if(map0[wx][wy+1] == 4 || map0[wx][wy+1] == 7)//Ïä×Ó
{
if(map0[wx][wy+2] == 0 || map0[wx][wy+2] == 3)//ÉÏÃæÊǿյÄ
{
map0[wx][wy] -= 5;
map0[wx][wy+1] += 1;//Ä¿±êλÖñäΪÈË
map0[wx][wy+2] += 4;//Ïä×ÓÒÆÎ»
}
}
break;
default:break;
}
}
void setmap(int n){
switch(n){
case 1:
memcpy(map0, map1, sizeof(map1));
wx=5;//È˵ÄλÖÃ
wy=3;
break;
case 2:
memcpy(map0, map2, sizeof(map2));
wx=1;//È˵ÄλÖÃ
wy=1;
break;
case 3:
memcpy(map0, map3, sizeof(map3));
wx=1;//È˵ÄλÖÃ
wy=8;
break;
}
}
int main()
{
start();//³õʼ»¯
putimage_withalpha(NULL, pimgs[8], 0, 0);//¿ª¾Ö»Ãæ
getch();
a: setmap(1);
draw();//ͼÐλæÖÆ
while(1)
{
while(kbmsg())
{
keyMsg = getkey();
if((keyMsg.msg == key_msg_down)&&((keyMsg.key=='A')||(keyMsg.key=='S')||
(keyMsg.key=='W')||(keyMsg.key=='D')))
{
update();
cleardevice();
draw();
}
else if((keyMsg.msg == key_msg_down)&&(keyMsg.key=='Q'))
{
setmap(pass);
cleardevice();
draw();
}
else if((keyMsg.msg == key_msg_down)&&(keyMsg.key==key_right))//ÓÒ
{
if((pass<=2)&&(pass>=1))
{
pass++;setmap(pass);
}
cleardevice();
draw();
}
else if((keyMsg.msg == key_msg_down)&&(keyMsg.key==key_left))//ÓÒ
{
if((pass<=3)&&(pass>=2))
{
pass--;setmap(pass);
}
cleardevice();
draw();
}
if(judgeOver())
{
xyprintf(75,100,"³É¹¦");
}
}
delay_fps(60);
}
getch();
goto a;
return 0;
}