gameplay.c
来自「linux/unix环境下的建站系统」· C语言 代码 · 共 143 行
C
143 行
#include"gamedefs.h"#include"gamedraw.h"#include"gameinit.h"#include"gameplay.h"#include"screens.h"extern BoxPoint * GameTargetData;extern int TargetPointNum; // Target Point Numberextern int BoxPointNum; // Target Point Numberextern int PadBaseX, PadBaseY; // Pad Base X, Yextern BoxPoint WorkerPoint; // Worker Current Positionextern char * GamePad; // Game Pad Mapextern int PadWidth, PadHeight; // Game Pad Width, HeightBoxPoint PadDiff[MaxDiff];int PadDiffNum = 0;Boolean addiff(int x, int y){ if(PadDiffNum >= MaxDiff) return FALSE; PadDiff[PadDiffNum].x = x; PadDiff[PadDiffNum].y = y; PadDiffNum ++; return TRUE;}void showdiff(void){ int i; for(i=0; i< PadDiffNum; i++) DrawCell(PadDiff[i].x, PadDiff[i].y); worker(WorkerPoint.x, WorkerPoint.y);}void cleardiff(void){ PadDiffNum = 0;}void movebox(int x, int y, int xoff, int yoff){ char * ptr, * target; ptr = GamePad + y * PadWidth + x; target = ptr + xoff + yoff*PadWidth; if(PadSpace != *target && PadTarget != *target) return; if(0 == (PadBox & *ptr)) return; *target++ |= PadBox; *target |= PadBox; *ptr++ &= ~PadBox; *ptr &= ~PadBox;}/*Boolean workermove(Direction dir)*/int workermove(int dir){ Boolean b_rtn; char other, target; char * ptr; int x, y, xoff, yoff; b_rtn = 0; x = WorkerPoint.x; y = WorkerPoint.y; ptr = GamePad + y * PadWidth + x; switch(dir) { case East: xoff = 2; yoff = 0; break; // 2 space for each cell case West: xoff = -2; yoff = 0; break; case North: xoff = 0; yoff = -1; break; case South: xoff = 0; yoff = 1; break; default : return 0; // break; } target = *(ptr + xoff + yoff*PadWidth); other = *(ptr + ((xoff + yoff*PadWidth)<<1)); if(PadSpace == target || PadTarget == target) b_rtn = 1; else if(PadBox & target) { if(PadSpace == other || PadTarget == other) { addiff(x+xoff*2, y+yoff*2); movebox(x + xoff, y + yoff, xoff, yoff); b_rtn = 2; } else b_rtn = 0; } else b_rtn = 0; if(b_rtn) { addiff(x, y); addiff(x+xoff, y+yoff); WorkerPoint.x = x + xoff; WorkerPoint.y = y + yoff; } return b_rtn;}void regretmove(int dir){ int x, y, xoff, yoff; int bmovebox=0; x = WorkerPoint.x; y = WorkerPoint.y; if (dir>8) { dir-=8; bmovebox=1; } switch(dir) { case East: xoff = 2; yoff = 0; break; // 2 space for each cell case West: xoff = -2; yoff = 0; break; case North: xoff = 0; yoff = -1; break; case South: xoff = 0; yoff = 1; break; default : return ; // break; } addiff(x+xoff, y+yoff); addiff(x, y); addiff(x-xoff, y-yoff); WorkerPoint.x = x - xoff; WorkerPoint.y = y - yoff; if (bmovebox) movebox(x + xoff, y + yoff, -xoff, -yoff);}Boolean wingame(void){ int i, x, y, num; char * ptr; num = 0; for(i=0;i<TargetPointNum;i++) { x = GameTargetData[i].x; y = GameTargetData[i].y; ptr = GamePad + x + y * PadWidth; if((*ptr & PadTarget) && (*ptr & PadBox)) num ++; else break; } if(num != TargetPointNum) return FALSE; else return TRUE;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?