Discuz! Board

 找回密码
 立即注册
查看: 866|回复: 0

2023.5.13

[复制链接]

5

主题

5

帖子

30

积分

新手上路

Rank: 1

积分
30
发表于 2023-5-13 19:03:38 | 显示全部楼层 |阅读模式
[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;
}


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-5-29 05:18 , Processed in 0.059646 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.. 技术支持 by 巅峰设计

快速回复 返回顶部 返回列表