📄 pushdraw.cpp
字号:
#include<graphics.h>
#include "pushing.h"
#include <string.h>
void drawbackgroundblock(int x, int y)
{
char checkerboard[8]={
0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55};
setfillpattern(checkerboard,LIGHTGRAY);
bar(x,y,x+23,y+23);
} //draw background
void drawbox_2( int x, int y)
{
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(x,y,x+23,y+23);
setcolor(WHITE);
line(x,y+23,x,y);
line(x,y,x+23,y);
setcolor(DARKGRAY);
line(x+23,y,x+23,y+23);
line(x,y+23,x+23,y+23);
setfillstyle(SOLID_FILL,DARKGRAY);
bar(x+8,y,x+16,y+23);
bar(x,y+8,x+23,y+16);
} //draw begin box
void drawbox_1(int x, int y)
{
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(x,y,x+23,y+23);
setcolor(WHITE);
line(x,y+23,x,y);
line(x,y,x+23,y);
setcolor(DARKGRAY);
line(x+23,y,x+23,y+23);
line(x,y+23,x+23,y+23);
setfillstyle(SOLID_FILL,BLUE);
bar(x+8,y,x+16,y+23);
bar(x,y+8,x+23,y+16);
} //draw end box
void drawboy( int x, int y, int ready)
{
drawbackgroundblock(x,y);
setfillstyle(SOLID_FILL,YELLOW);
setcolor(RED);
fillellipse(x+12,y+12,11,11);
if (ready)
{
line(x+4,y+4,x+10,y+8);
line(x+24-4,y+4,x+24-10,y+8);
line(x+6,y+24-4,x+12,y+24-10);
line(x+12,y+24-10,x+24-6,y+24-4);
}
else
{
line(x+4,y+5,x+10,y+5);
line(x+24-4,y+5,x+24-10,y+5);
arc(x+12,y+14,200,340,6);
}
} //draw workboy
void drawwallblock(int x, int y)
{
setfillstyle(SOLID_FILL,RED);
bar(x,y,x+23,y+23);
setcolor(WHITE);
line(x,y,x+23,y);
line(x,y+23,x+23,y+23);
line(x,y+8,x+23,y+8);
line(x,y+16,x+23,y+16);
line(x,y,x,y+8);
line(x+6,y+8,x+6,y+16);
line(x+12,y+16,x+12,y+23);
} //draw wallblock
void drawboxpos(int x, int y)
{
setfillstyle(SOLID_FILL,GREEN);
setcolor(GREEN);
fillellipse(x+12,y+12,12,12);
} //draw the target
void drawpathunit(int x,int y,int h,int l)
{
switch(path[h][l])
{
case ' ':
drawbackgroundblock(x+l*24,y+h*24);
break;
case 'X':
drawbox_1(x+l*24,y+h*24);
break;
case 'x':
drawbox_2(x+l*24,y+h*24);
break;
case 'O':
drawboxpos(x+l*24,y+h*24);
break;
case '#':
drawwallblock(x+l*24,y+h*24);
break;
case 'o':
case '8':
if(path[h][l-1]=='X'||path[h][l+1]=='X'||
path[h-1][l]=='X'||path[h+1][l]=='X'||
path[h][l-1]=='x'||path[h][l+1]=='x'||
path[h-1][l]=='x'||path[h+1][l]=='x'
)
drawboy(x+l*24,y+h*24,1);
else
drawboy(x+l*24,y+h*24,0);
break;
}
}
void drawpath(int x,int y)
{
int h,l;
int i,j;
boxnum=0;
cleardevice();
for(i=0;i<20;i++)
{
if(strlen(path[i])==0)
{
h=i;
break;
}
}
l=strlen(path[0]);
path_h=h;
path_l=l;
setcolor(WHITE);
rectangle(x-1,y-1,x+l*24+1,y+h*24+1);
for(i=0;i<h;i++)
for(j=0;j<l;j++)
switch(path[i][j])
{
case ' ':
drawbackgroundblock(x+j*24,y+i*24);
break;
case 'X':
drawbox_1(x+j*24,y+i*24);
boxnum++;
break;
case 'O':
drawboxpos(x+j*24,y+i*24);
break;
case '#':
drawwallblock(x+j*24,y+i*24);
break;
case '8':
if(path[i][j-1]=='X'||path[i][j+1]=='X'||
path[i-1][j]=='X'||path[i+1][j]=='X')
drawboy(x+j*24,y+i*24,1);
else
drawboy(x+j*24,y+i*24,0);
boy_h=i;
boy_l=j;
break;
}
}
void savepath(char dest_p[20][20],char source_p[20][20])
{
int i,j;
for(i=0; i<20; i++) //save the original path
for(j=0;j<20;j++)
dest_p[i][j]=source_p[i][j];
}
int isgamewin(char p1[20][20],char p2[20][20])
{
int i,j;
for(i=0; i<20;i++)
for(j=0;j<20;j++)
{
if (p1[i][j]=='O')
if(p2[i][j]!='x') return 0;
}
if(20==i) return 1;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -