推箱子c語言代碼
⑴ 如何用c語言編寫控制台小游戲
//C語言實例:推箱子小游戲
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
//行和列
#defineROW10
#defineCOL11
/*,system("pause")orinputloop*/
/**
*
*
*/
//地圖
charmap[ROW][COL]={
"##########",//0
"#####",//1
"#####",//2
"##AX###",//3
"#####",//4
"######",//5
"###",//6
"#####",//7
"###",//8
"##########"//9
//A:人,X:箱子
};
//列印地圖
voidshowMap();
//接收小人的方向
charenterDirection();
//小人向上移動的方法
voidmoveToUp();
//小人向下移動的方法
voidmoveToDown();
//小人向右移動的方法
voidmoveToRight();
//小人向左移動的方法
voidmoveToLeft();
//當前小人的坐標
intcurrentPersonRow=3;
intcurrentPersonCol=2;
//當前箱子的坐標
intcurrentBoxRow=3;
intcurrentBoxCol=3;intmain(intargc,char*argv[]){
//system("clear");
printf("點擊回車鍵開始游戲^_^ ");
//1代表運行0停止
intflag=1;
while(flag==1){
//顯示地圖
showMap();
//接收小人的方向
chardir=enterDirection();
switch(dir){
//小人向上移動
case'w':
case'W':
moveToUp();
break;
//小人向下移動
case's':
case'S':
moveToDown();
break;
//小人向右移動
case'd':
case'D':
moveToRight();
break;
//小人向左移動
case'a':
case'A':
moveToLeft();
break;
//停止運行
case'q':
case'Q':
printf("你的智商真低!T_T ");
flag=0;
break;
}
showMap();
if(currentBoxRow==8&¤tBoxCol==9){
printf("你的智商真高^_^!!!");
flag=0;
}
}
}
/*
方法的實現
*/
//列印地圖
voidshowMap(){
inti;
for(i=0;i<ROW;i++){
printf("%s ",map[i]);
}
printf(" ");
printf("W:上,S:下,A:左,D:右。Q:退出");
printf(" ");
}
//接收小人的方向
charenterDirection(){
//清除SCANF中的緩沖區
rewind(stdin);
chardir;
dir=getch();
//scanf("%c",&dir);
returndir;
}
//小人向上移動的方法
voidmoveToUp(){
//小人的下一個坐標
intnextPersonCol=currentPersonCol;
intnextPersonRow=currentPersonRow-1;
//箱子的下一個坐標
intnextBoxRow=currentBoxRow-1;
intnextBoxCol=currentBoxCol;
//如果小人的下一個坐標是路
if(map[nextPersonRow][nextPersonCol]==''){
map[nextPersonRow][nextPersonCol]='A';
map[currentPersonRow][currentPersonCol]='';
currentPersonRow=nextPersonRow;
currentPersonCol=nextPersonCol;
}
//如果小人的下一個坐標是牆
if(map[nextPersonRow][nextPersonCol]=='#'){
//什麼也不做
}
//如果小人的下一個坐標是箱子
if(map[nextPersonRow][nextPersonCol]=='X'){
if(map[nextBoxRow][nextBoxCol]==''){
map[nextPersonRow][nextPersonCol]='A';
map[currentPersonRow][currentPersonCol]='';
map[nextBoxRow][nextBoxCol]='X';
map[currentBoxRow][currentBoxCol]='A';
currentPersonRow=nextPersonRow;
currentPersonCol=nextPersonCol;
currentBoxRow=nextBoxRow;
currentBoxCol=nextBoxCol;
}
}
}
//小人向下移動的方法
voidmoveToDown(){
//小人的下一個坐標
intnextPersonCol=currentPersonCol;
intnextPersonRow=currentPersonRow+1;
//箱子的下一個坐標
intnextBoxRow=currentBoxRow+1;
intnextBoxCol=currentBoxCol;
//如果小人的下一個坐標是路
if(map[nextPersonRow][nextPersonCol]==''){
map[nextPersonRow][nextPersonCol]='A';
map[currentPersonRow][currentPersonCol]='';
currentPersonRow=nextPersonRow;
currentPersonCol=nextPersonCol;
}
//如果小人的下一個坐標是牆
if(map[nextPersonRow][nextPersonCol]=='#'){
//什麼也不做
}
//如果小人的下一個坐標是箱子
if(map[nextPersonRow][nextPersonCol]=='X'){
if(map[nextBoxRow][nextBoxCol]==''){
map[nextPersonRow][nextPersonCol]='A';
map[currentPersonRow][currentPersonCol]='';
map[nextBoxRow][nextBoxCol]='X';
map[currentBoxRow][currentBoxCol]='A';
currentPersonRow=nextPersonRow;
currentPersonCol=nextPersonCol;
currentBoxRow=nextBoxRow;
currentBoxCol=nextBoxCol;
}
}
}
//小人向右移動的方法
voidmoveToRight(){
//小人的下一個坐標
intnextPersonCol=currentPersonCol+1;
intnextPersonRow=currentPersonRow;
//箱子的下一個坐標
intnextBoxRow=currentBoxRow;
intnextBoxCol=currentBoxCol+1;
//如果小人的下一個坐標是路
if(map[nextPersonRow][nextPersonCol]==''){
map[nextPersonRow][nextPersonCol]='A';
map[currentPersonRow][currentPersonCol]='';
currentPersonRow=nextPersonRow;
currentPersonCol=nextPersonCol;
}
//如果小人的下一個坐標是牆
if(map[nextPersonRow][nextPersonCol]=='#'){
//什麼也不做
}
//如果小人的下一個坐標是箱子
if(map[nextPersonRow][nextPersonCol]=='X'){
if(map[nextBoxRow][nextBoxCol]==''){
map[nextPersonRow][nextPersonCol]='A';
map[currentPersonRow][currentPersonCol]='';
map[nextBoxRow][nextBoxCol]='X';
map[currentBoxRow][currentBoxCol]='A';
currentPersonRow=nextPersonRow;
currentPersonCol=nextPersonCol;
currentBoxRow=nextBoxRow;
currentBoxCol=nextBoxCol;
}
}
}
//小人向左移動的方法
voidmoveToLeft(){
//小人的下一個坐標
intnextPersonCol=currentPersonCol-1;
intnextPersonRow=currentPersonRow;
//箱子的下一個坐標
intnextBoxRow=currentBoxRow;
intnextBoxCol=currentBoxCol-1;
//如果小人的下一個坐標是路
if(map[nextPersonRow][nextPersonCol]==''){
map[nextPersonRow][nextPersonCol]='A';
map[currentPersonRow][currentPersonCol]='';
currentPersonRow=nextPersonRow;
currentPersonCol=nextPersonCol;
}
//如果小人的下一個坐標是牆
if(map[nextPersonRow][nextPersonCol]=='#'){
//什麼也不做
}
//如果小人的下一個坐標是箱子
if(map[nextPersonRow][nextPersonCol]=='X'){
if(map[nextBoxRow][nextBoxCol]==''){
map[nextPersonRow][nextPersonCol]='A';
map[currentPersonRow][currentPersonCol]='';
map[nextBoxRow][nextBoxCol]='X';
map[currentBoxRow][currentBoxCol]='A';
currentPersonRow=nextPersonRow;
currentPersonCol=nextPersonCol;
currentBoxRow=nextBoxRow;
currentBoxCol=nextBoxCol;
}
}
}
⑵ 誰有能在vc++6.0上運行的c語言小游戲代碼
最基礎的貪吃蛇的代碼
#include<stdio.h>
#include<windows.h>//基本型態定義。支援型仔明態定義函數。使用者界面函數 圖形裝置界面函數。
#include<conio.h> //用戶通過按鍵盤產生的對應操作 (控制台)
#include<stdlib.h>
#include<time.h> //日期和時間頭文件
#define LEN 30
#define WID 25
int Snake[LEN][WID] = {0}; //數組的元素代表蛇的各個部位
char Sna_Hea_Dir = 'a';//記錄蛇頭的移動方向
int Sna_Hea_X, Sna_Hea_Y;//記錄蛇頭的位置
int Snake_Len = 3;//記錄蛇的長度
clock_t Now_Time;//記錄當前時間,以便自動移動
int Wait_Time ;//記錄自動移動的時間間隔
int Eat_Apple = 1;//吃到蘋果表示為1
int Level ;
int All_Score = -1;
int Apple_Num = -1;
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); //獲取標准輸出的句柄 <windows.h>
//句柄 :標志應用程序中的不同對象和同類對象中的不同的實例 方便操控,
void gotoxy(int x, int y)//設置游標位置
{
COORD pos = {x,y}; //定義一個字元在控制台屏幕上的坐標POS
SetConsoleCursorPosition(hConsole, pos); //定位游標位置的函數<windows.h>
}
void Hide_Cursor()//隱藏游標 固定函數
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(hConsole, &cursor_info);
}
void SetColor(int color)//設置顏色
{
SetConsoleTextAttribute(hConsole, color);
//是API設置字體顏色和背景色的函數 格式:SetConsoleTextAttribute(句柄,顏色);
}
void Print_Snake()//列印蛇頭和蛇的脖子和蛇尾
{
int iy, ix, color;
for(iy = 0; iy < WID; ++iy)
for(ix = 0; ix < LEN; ++ix)
{
if(Snake[ix][iy] == 1)//蛇頭
{
SetColor(0xf); //oxf代慶搏表分配的內存地址 setcolor:34行自定義設置顏色的函數
gotoxy(ix*2, iy);
printf("※");
}
if(Snake[ix][iy] == 2)//蛇的脖子
{
color = rand()%15 + 1; //rand()函數是產生隨機念差告數的一個隨機函數。C語言里還有 srand()函數等。
//頭文件:stdlib.h
if(color == 14)
color -= rand() % 13 + 1; //變色
SetColor(color);
gotoxy(ix*2, iy);
printf("■");
}
if(Snake[ix][iy] == Snake_Len)
{
gotoxy(ix*2, iy);
SetColor(0xe);
printf("≈");
}
}
}
void Clear_Snake()//擦除貪吃蛇
{
int iy, ix;
for(iy = 0; iy < WID; ++iy)
for(ix = 0; ix < LEN; ++ix)
{
gotoxy(ix*2, iy);
if(Snake[ix][iy] == Snake_Len)
printf(" ");
}
}
void Rand_Apple()//隨機產生蘋果
{
int ix, iy;
do
{
ix = rand() % LEN;
iy = rand() % WID;
}while(Snake[ix][iy]);
Snake[ix][iy] = -1;
gotoxy(ix*2, iy);
printf("⊙");
Eat_Apple = 0;
}
void Game_Over()//蛇死掉了
{
gotoxy(30, 10);
printf("Game Over");
Sleep(3000);
system("pause > nul");
exit(0);
}
void Move_Snake()//讓蛇動起來
{
int ix, iy;
for(ix = 0; ix < LEN; ++ix)//先標記蛇頭
for(iy = 0; iy < WID; ++iy)
if(Snake[ix][iy] == 1)
{
switch(Sna_Hea_Dir)//根據新的蛇頭方向標志蛇頭
{
case 'w':
if(iy == 0)
Game_Over();
else
Sna_Hea_Y = iy - 1;
Sna_Hea_X = ix;
break;
case 's':
if(iy == (WID -1))
Game_Over();
else
Sna_Hea_Y = iy + 1;
Sna_Hea_X = ix;
break;
case 'a':
if(ix == 0)
Game_Over();
else
Sna_Hea_X = ix - 1;
Sna_Hea_Y = iy;
break;
case 'd':
if(ix == (LEN - 1))
Game_Over();
else
Sna_Hea_X = ix + 1;
Sna_Hea_Y = iy;
break;
default:
break;
}
}
if(Snake[Sna_Hea_X][Sna_Hea_Y]!=1&&Snake[Sna_Hea_X][Sna_Hea_Y]!=0&&Snake[Sna_Hea_X][Sna_Hea_Y]!=-1)
Game_Over();
if(Snake[Sna_Hea_X][Sna_Hea_Y] < 0)//吃到蘋果
{
++Snake_Len;
Eat_Apple = 1;
}
for(ix = 0; ix < LEN; ++ix)//處理蛇尾
for(iy = 0; iy < WID; ++iy)
{
if(Snake[ix][iy] > 0)
{
if(Snake[ix][iy] != Snake_Len)
Snake[ix][iy] += 1;
else
Snake[ix][iy] = 0;
}
}
Snake[Sna_Hea_X][Sna_Hea_Y] = 1;//處理蛇頭
}
void Get_Input()//控制蛇的移動方向
{
if(kbhit())
{
switch(getch())
{
case 87:
Sna_Hea_Dir = 'w';
break;
case 83:
Sna_Hea_Dir = 's';
break;
case 65:
Sna_Hea_Dir = 'a';
break;
case 68:
Sna_Hea_Dir = 'd';
break;
default:
break;
}
}
if(clock() - Now_Time >= Wait_Time)//蛇到時間自動行走
{
Clear_Snake();
Move_Snake();
Print_Snake();
Now_Time = clock();
}
}
void Init()//初始化
{
system("title 貪吃毛毛蛇");
system("mode con: cols=80 lines=25");
Hide_Cursor();
gotoxy(61, 4);
printf("You Score:");
gotoxy(61, 6);
printf("You Level:");
gotoxy(61, 8);
printf("The Lenght:");
gotoxy(61, 10);
printf("The Speed:");
gotoxy(61, 12);
printf("Apple Num:");
int i;
for(i = 0; i < Snake_Len; ++i)//生成蛇
Snake[10+i][15] = i+1;
int iy, ix;//列印蛇
for(iy = 0; iy < WID; ++iy)
for(ix = 0; ix < LEN; ++ix)
{
if(Snake[ix][iy])
{
SetColor(Snake[ix][iy]);
gotoxy(ix*2, iy);
printf("■");
}
}
}
void Pri_News()//列印信息
{
SetColor(0xe);
gotoxy(73,4);
All_Score += Level;
printf("%3d", All_Score);
gotoxy(73, 6);
printf("%3d", Level);
gotoxy(73, 8);
printf("%3d",Snake_Len);
gotoxy(73, 10);
printf("0.%3ds", Wait_Time/10);
gotoxy(73, 12);
printf("%d", Apple_Num);
}
void Lev_Sys()//等級系統
{
if(((Apple_Num-1) / 10) == Level)
{
++Level;
if(Wait_Time > 50)
Wait_Time -= 50;
else
if(Wait_Time > 10)
Wait_Time -= 10;
else
Wait_Time -= 1;
}
}
int main(void)
{
Init();
srand((unsigned)time(NULL));//設置隨機數的種子
Now_Time = clock();
int speed1=1000,speed2,a;
printf("\n");
printf("請輸入你想要的速度\n");
scanf("%d",&speed2);
Level=1;
Wait_Time=speed1-speed2;
printf("請輸入你想要的蘋果數\n");
scanf("%d",&a);
while(a--)
Rand_Apple();
while(1)
{
if(Eat_Apple)
{
++Apple_Num;
Rand_Apple();
Lev_Sys();
Pri_News();
}
Get_Input();
Sleep(10);
}
return 0;
}
⑶ 求C語言小游戲源程序
新手要方便寫代碼,可以收藏下面幾個自編函數:
gtxy (6, 3) //游標定位於窗口的第6列,第3行處(准備輸出,行與列都是從0算起)
Color (4, 0) //設置為紅字配黑底 如 Color (10, 0)則是淡綠字配黑底
yinc (1,0) //隱藏游標(第二個參數設為0就隱藏,沒有游標閃爍,yinc代表隱藏)
kou(80,25) //設定窗口緩沖區大小為80列,25行
下面幾個是庫函數,不需自己編寫,只要用#include包含就可以使用。
SetConsoleTitle("俄羅斯方塊"); //設置窗口左上角標題欄處出現"俄羅斯方塊"5個字
srand( (unsigned) time(NULL) ); //初始化隨機數發生器
n= rand( ) % 20; //產生隨機數0-19中的一個. 如 rand( )%5 就產生0-4中的一個數
SetConsoleTitle( )函數在<windows.h>里,srand( )函數與rand( )函數要配合用,
就是同時要用,在<stdlib.h>里。如果 rand( )%10+1 就產生1-10之中的一個數。
Sleep(300); //延時300毫秒(就是程序暫停300毫秒後繼續運行)
system("cls"); //清屏(把窗口裡的內容全部清除,游標定於(0,0)位置處)
這兩個函數都在<windows.h>里。開頭4個自編函數 編寫如下:
void gtxy (int x, int y) //控制游標位置的函數
{ COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition ( GetStdHandle (STD_OUTPUT_HANDLE), pos );
}
void Color (short ForeColor= 7, short BackGroundColor= 0) //設定顏色的函數
{ HANDLE hl = GetStdHandle ( STD_OUTPUT_HANDLE );
SetConsoleTextAttribute ( hl, ForeColor + BackGroundColor * 0x10 );
}
聲明時原型可寫 void Color (short x, short y);
void yinc (int x,int y) //隱藏游標的函數
{ CONSOLE_CURSOR_INFO gb={ x , y }; //gb代表游標
SetConsoleCursorInfo ( GetStdHandle(STD_OUTPUT_HANDLE), &gb );
}
void kou(int w,int h) //設置窗口大小的函數
{HANDLE hl=GetStdHandle ( STD_OUTPUT_HANDLE ) ;
COORD size={ w , h };
SetConsoleScreenBufferSize( hl , size );
SMALL_RECT rc={ 0, 0, w, h };
SetConsoleWindowInfo( hl, 1, &rc );
}
最後這個函數,參數w是寬h是高。里邊5行中第一行定義了句柄型變數hl,並給它賦值。
第二行定義了坐標型結構體變數size,它的取值決定了緩沖區的大小。第三行就是使用
size的值設置好緩沖區大小。第四行定義了變數rc,它的值決定當前窗口顯示的位置與
大小(不得超過緩沖區的大小)。前兩個0,0是從緩沖區左上角0列0行位置處開始,後兩
個參數可以小於w和h.比如rc={0,0,w-10,h-5}; 最後一行使用rc的值設置好窗口,中間
那個參數要為" 1 "或寫「 true 」才有效。
⑷ 簡單的搬運工C語言代碼
程序在tc3.0下編譯通過. 回車鍵選關,我只做了兩關, r鍵重新開始 p鍵悔步,只能悔五步啊.不過你可以改#define STEPMAX的值 #define MAX 2 /*游戲中總關數*/#define STARTX 180#define STARTY 80#define ...
程序在tc3.0下編譯通過. 回車鍵
選關,我只做了兩關, r鍵重新開始
p鍵悔步,只能悔五步啊.不過你可以
改#define STEPMAX的值
#define MAX 2 /*游戲中總關數*/
#define STARTX 180
#define STARTY 80
#define BKCOLOR BLACK
#define MANCOLOR RED
#define OBJECTCOLOR YELLOW
#define TIMEINT 2
#define STARNUM 300
#define STEPMAX 5
#include<sing.h>
#include<bios.h>檔芹
#include<sio.h>
#include<dos.h>
#include<graphics.h>
#include<conio.h>
#include<time.h>
#include<slib.h>
#include<sio.h>
#define Key_R 0x1372
#define Key_Up 0x4800
#define Key_Enter 0x1c0d
#define Key_Down 0x5000
#define Key_P 0x1970
#define Key_Esc 0x11b
#define Key_Right 0x4d00
#define Key_Left 0x4b00
typedef suct star
{
int x;
int y;
int c;
}Star;
Star s;
typedef suct record
{
char name;
int second;
suct time t;
suct date d;
}Record;
Record r;
typedef suct c
{
int x;
int y;
}Add;
typedef suct a
{
int x;
int y;
}Player;
Player p;
char name; /*進入游戲時記錄玩家的姓名*/
time_t t1,t2; /*游戲結束時的時間*/
int Ide; /*開始進入游戲時,選擇菜單時返的功能號(1,2,3)*/
int MissionNum; /*玩家正在玩的關數*/橘蠢帶
int BoxNum; /*目的地的個數*/
int Key; /*玩家按鍵*/
int map; /*地圖.(空=0),(人=1),(箱子=2),(牆=3),(目的地圓蘆=4),(人 目的地=5),(箱子 目的地=6)*/
int StepNum;
int DirectionKey; /*用來表示方向鍵最後一次按鍵*/
int BoxMove;
int Step;
/*函數定義*/
void InputName();
void Init();
void MainMenu();
void JudgeRecord();
void WriteRecord();
void JudgeIde();
void DrawMenu(int );
void Game();
void InitMission(int );
void NextMission();
void InitPic(int ,int ,int );
int Move(Add );
void DrawWall(int ,int );
void DrawBack(int ,int );
void DrawBox(int ,int );
void DrawObject(int ,int );
void DrawMan(int ,int );
void DrawStar();
int JudgeWin();
void InitMission1();
void InitMission2();
int TimeCome();
void ChangeStar();
void InputName();
void ViewRecords();
void DeleteRecords();
void RegisterStep();
void ReverselyMove();
void MoveBack(Add );
void main()
{
InputName();
Init(); /*驅動顯卡*/
srand(time(&t1));
MainMenu(); /*畫開始菜單(1.start game 2.view records 3.delete records 4.exit game)*/
}
void InputName()
{
char c;
clrscr();
do
{
printf("\n\nPlease input your name:");
scanf("%s",name);
printf("Are you sure the name right(Y/N):");
do
{
c=getch();
}while(c!='Y'&&c!='y'&&c!='N'&&c!='n');
}while(c!='Y'&&c!='y');
}
void Init()
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"c:\\tc");
}
void MainMenu()
{
setbkcolor(BKCOLOR);
cleardevice();
/*DrawStar(); /*畫開始菜單的背景畫面*/
DrawStar();
Ide=0,Key=0;
DrawMenu(Ide);
do
{
if(bioskey(1)) /*有鍵按下則處理按鍵*/
{
Key=bioskey(0);
switch(Key)
{
case Key_Down: {Ide ;Ide=Ide%4;DrawMenu(Ide);break;}
case Key_Up: {Ide--;Ide=(Ide 4)%4;DrawMenu(Ide);break;}
}
}
else {if(TimeCome()) ChangeStar();} /*改變背景*/
}while(Key!=Key_Enter);
JudgeIde(); /*根據Ide運行不同的程序*/
}
void JudgeIde()
{
switch(Ide)
{
case 0:Game();break;
case 1:{ViewRecords();bioskey(0);MainMenu();break;}
case 2:{DeleteRecords();ViewRecords();bioskey(0);MainMenu();break;}
case 3:exit(0);
}
}
void Game()
{
int i,j,flag;
Add ad;
MissionNum=0;
NextMission();
do
{
flag=0;
Key=bioskey(0);
switch(Key)
{
case Key_Enter:{NextMission();time(&t1);break;}
case Key_Up:{ad.x=-1;ad.y=0;flag=1;DirectionKey=Key;break;}
case Key_Down:{ad.x=1;ad.y=0;flag=1;DirectionKey=Key;break;}
case Key_Left:{ad.x=0;ad.y=-1;flag=1;DirectionKey=Key;break;}
case Key_Right:{ad.x=0;ad.y=1;flag=1;DirectionKey=Key;break;}
case Key_R:{MissionNum--;NextMission();break;}
case Key_Esc:{MainMenu();break;}
case Key_P:{ReverselyMove();break;}
}
if(flag==1)
{if(Move(ad)) {RegisterStep(); if(JudgeWin()) {JudgeRecord();NextMission();}}}
}while(1);
}
void InitMission(int n)
{
int i,j;
for(i=0;i<10;i )
for(j=0;j<10;j )
map=0;
switch(n)
{
case 1:InitMission1();break; /*第一關*/
case 2:InitMission2();break; /*第二關*/
}
}
void InitPic(int n,int i,int j)
{
switch(n)
{
case 0:DrawBack(i,j);break;
case 1:DrawMan(i,j);break;
case 2:DrawBo
x(i,j);break;
case 3:DrawWall(i,j);break;
case 4:DrawObject(i,j);break;
case 5:DrawMan(i,j);break;
case 6:DrawBox(i,j);break;
}
}
void NextMission()
{
int i,j;
if(MissionNum 1>MAX) MissionNum=1;
else MissionNum ;
InitMission(MissionNum);
setbkcolor(BKCOLOR);
cleardevice();
for(i=0;i<10;i )
for(j=0;j<10;j )
InitPic(map,i,j);
switch(MissionNum)
{
case 1:outtextxy(200,230,"Mission 1");break;
case 2:outtextxy(200,230,"Mission 2");break;
}
time(&t1);
for(i=0;i<STEPMAX;i )
{Step=BoxMove=0;}
StepNum=0;
}
int Move(Add a)
{
int flag;
int i=StepNum%STEPMAX;
switch(map) /*看下一位置為什麼*/
{
case 0:{map-=1;InitPic(map,p.x,p.y);
p.x=p.x a.x;p.y=p.y a.y;
map =1;InitPic(map,p.x,p.y);flag=1;break;}
case 2:{if(map==0||map==4)
{map-=1;map=1;map =2;
InitPic(map,p.x,p.y);
InitPic(map,p.x a.x,p.y a.y);
InitPic(map,p.x 2*a.x,p.y 2*a.y);
p.x=p.x a.x;p.y=p.y a.y;flag=1;BoxMove=1;}
else flag=0;
break;}
case 3:flag=0;break;
case 4:{map-=1;InitPic(map,p.x,p.y);
p.x=p.x a.x;p.y=p.y a.y;
map =1;InitPic(map,p.x,p.y);flag=1;break;}
case 6:{if(map==0||map==4)
{map-=1;map=5;map =2;
InitPic(map,p.x,p.y);
InitPic(map,p.x a.x,p.y a.y);
InitPic(map,p.x 2*a.x,p.y 2*a.y);
p.x=p.x a.x;p.y=p.y a.y;flag=1;BoxMove=1;}
else flag=0;
break;}
}
return flag;
}
void DrawWall(int i,int j)
{
DrawBack(i,j);
setfillstyle(9,1);
bar(STARTX 20*j-9,STARTY 20*i-9,STARTX 20*j 9,STARTY 20*i 9);
}
void DrawMan(int i,int j)
{
DrawBack(i,j);
setcolor(MANCOLOR);
circle(STARTX 20*j,STARTY 20*i,9);
arc(STARTX 20*j-3,STARTY 20*i-2,20,160,3);
arc(STARTX 20*j 4,STARTY 20*i-2,20,160,3);
arc(STARTX 20*j,STARTY 20*i-2,220,320,7);
}
void DrawBack(int i,int j)
{
setfillstyle(1,BKCOLOR);
bar(STARTX 20*j-9,STARTY 20*i-9,STARTX 20*j 9,STARTY 20*i 9);
}
void DrawObject(int i,int j)
{
DrawBack(i,j);
setcolor(OBJECTCOLOR);
line(STARTX 20*j-9,STARTY 20*i,STARTX 20*j 9,STARTY 20*i);
line(STARTX 20*j-9,STARTY 20*i-9,STARTX 20*j 9,STARTY 20*i 9);
line(STARTX 20*j-9,STARTY 20*i 9,STARTX 20*j 9,STARTY 20*i-9);
}
void DrawBox(int i,int j)
{
DrawBack(i,j);
setfillstyle(9,3);
bar(STARTX 20*j-9,STARTY 20*i-9,STARTX 20*j 9,STARTY 20*i 9);
}
void DrawMenu(int j)
{
int n;
char *s={"1.Start Game","2.View Records","3.Delete Records","4.Exit Game"};
settextstyle(0,0,1);
setcolor(GREEN);
for(n=0;n<4;n )
outtextxy(250,170 n*20,s);
setcolor(RED);
outtextxy(250,170 j*20,s);
}
void DrawStar()
{
int w,h,i,dotx,doty,color,maxcolor;
w=getmaxx();
h=getmaxy();
maxcolor=getmaxcolor();
for(i=0;i<STARNUM;i )
{
s.x=1 random(w-1);
s.y=1 random(h-1);
s.c=random(maxcolor);
putpixel(s.x,s.y,s.c);
}
}
void ChangeStar()
{
int i,maxcolor;
maxcolor=getmaxcolor();
for(i=0;i<STARNUM;i )
{
s.c=random(maxcolor);
putpixel(s.x,s.y,s.c);
}
}
int TimeCome()
{
static long tm, old;
tm=biostime(0,tm);
if(tm-old<TIMEINT) return 0;
else
{
old=tm; return 1;
}
}
int JudgeWin()
{
int n=0,i,j;
for(i=0;i<10;i )
for(j=0;j<10;j )
if(map==6) n ;
if(n==BoxNum) return 1;
else return 0;
}
void InitMission1() /*第九關*/
{
int i,j;
for(i=0;i<10;i )
for(j=0;j<10;j )
map=0;
for(i=0;i<=5;i )
map=3;
for(i=5;i<=7;i )
{map=map=3;}
for(i=1;i<=4;i )
{map=map=map=3;}
map=map=map=3;
for(i=2;i<=4;i )
map=2;
map=map=2;
for(i=2;i<=3;i )
{map=map=4;}
map=4;
p.x=3;p.y=5;
map=1;
BoxNum=5;
}
void InitMission2()
{
int i,j;
for(i=0;i<10;i )
for(j=0;j<10;j )
map=0;
for(i=1;i<=5;i )
{map=map=3;}
for(i=2;i<=4;i )
{map=map=map=map=3;}
map=map=map=map=map=map=3;
map=map=map=map=2;
map=map=map=map=4;
p.x=1;p.y=3;
map=1;
BoxNum=4;
}
void ViewRecords()
{
FILE *fp;
int i;
setbkcolor(BKCOLOR);
cleardevice();
if((fp=fopen("record","r"))==NULL)
{
printf("\nerror on open file!");
getch();
exit(1);
}
gotoxy(1,1);
printf("\n\t\t\tRecord Information\n");
printf("Record-holder Achievement(s)\t Time(h:m:s)\t\tDate(y/m/d)");
for(i=0;i<MAX;i )
{fseek(fp,i*sizeof(Record),0);
fread(&r,sizeof(Record),1,fp);
printf("\n%-10s\t%d\t\t d:d:d\t\td/d/d",r.name,r.second,r.t.ti_hour,r.t.ti_min,r.t.ti_sec,r.d.da_year,r.d.da_mon,r.d.da_day);}
fclose(fp);
gotoxy(10,25);
printf("Press any key to return mainmenu...");
}
void DeleteRecords()
{
int i;
FILE *fp;
fp=fopen("record","w");
for(i=0;i<MAX;i )
{
scpy(r.name,"nameless");
r.second=0;
gettime(&r.t);
geate(&r.d);
}
for(i=0;i<MAX;i )
fwrite(&r,sizeof(Record),1,fp);
fclose(fp);
}
void JudgeRecord()
{
int i=MissionNum-1;
time(&t2);
if(r.second==0||difftime(t2,t1)<r.second)
{
gotoxy(10,3);printf("\t\tYou have broken the record");
r.second=difftime(t2,t1);
scpy(r.name,name);
gettime(&r.t);
geate(&r.d);
WriteRecord();
}
else
{gotoxy(10,3);printf("\t\tYou have pass this mission");}
gotoxy(10,4);
printf("\t\tpress any key continue...");
getch();
getch();
}
void WriteRecord()
{
FILE *fp;
int i=MissionNum-1;
fp=fopen("record","rt ");
fseek(fp,i*sizeof(Record),0);
fwrite(&r,sizeof(Record),1,fp);
fclose(fp);
}
void RegisterStep()
{
int i;
StepNum ;
i=(StepNum-1)%STEPMAX;
Step=DirectionKey;
}
void ReverselyMove()
{
int i;
Add ad;
i=(StepNum-1)%STEPMAX;
if(Step==0) return;
else
{
switch(Step)
{
case Key_Up:{ad.x=1;ad.y=0;MoveBack(ad);break;}
case Key_Down:{ad.x=-1;ad.y=0;MoveBack(ad);break;}
case Key_Left:{ad.x=0;ad.y=1;MoveBack(ad);break;}
case Key_Right:{ad.x=0;ad.y=-1;MoveBack(ad);break;}
}
StepNum--;Step=0;BoxMove=0;
}
}
void MoveBack(Add a) /*一定可以移動*/
{
int i=(StepNum-1)%STEPMAX;
if(BoxMove==0)
{
map-=1;InitPic(map,p.x,p.y);
p.x=p.x a.x;p.y=p.y a.y;
map =1;InitPic(map,p.x,p.y);
}
else if(BoxMove==1)
{
map-=2;InitPic(map,p.x-a.x,p.y-a.y);
map =1;InitPic(map,p.x,p.y);
p.x=p.x a.x;p.y=p.y a.y;
map =1;InitPic(map,p.x,p.y);
}
}
點這里下載
p=map=map=4;
p.x=1;p.y=3;
map=1;
BoxNum=4;
}
void ViewRecords()
{
FILE *fp;
int i;
setbkcolor(BKCOLOR);
cleardevice();
if((fp=fopen("record","r"))==NULL)
{
printf("\nerror on open file!");
getch();
exit(1);
}
gotoxy(1,1);
printf("\n\t\t\tRecord Information\n");
printf("Record-holder Achievement(s)\t Time(h:m:s)\t\tDate(y/m/d)");
for(i=0;i<MAX;i )
{fseek(fp,i*sizeof(Record),0);
fread(&r,sizeof(Record),1,fp);
printf("\n%-10s\t%d\t\t d:d:d\t\td/d/d",r.name,r.second,r.t.ti_hour,r.t.ti_min,r.t.ti_sec,r.d.da_year,r.d.da_mon,r.d.da_day);}
fclose(fp);
gotoxy(10,25);
printf("Press any key to return mainmenu...");
}
void DeleteRecords()
{
int i;
FILE *fp;
fp=fopen("record","w");
for(i=0;i<MAX;i )
{
scpy(r.name,"nameless");
r.second=0;
gettime(&r.t);
geate(&r.d);
}
for(i=0;i<MAX;i )
fwrite(&r,sizeof(Record),1,fp);
fclose(fp);
}
void JudgeRecord()
{
int i=MissionNum-1;
time(&t2);
if(r.second==0||difftime(t2,t1)<r.second)
{
gotoxy(10,3);printf("\t\tYou have broken the record");
r.second=difftime(t2,t1);
scpy(r.name,name);
gettime(&r.t);
geate(&r.d);
WriteRecord();
}
else
{gotoxy(10,3);printf("\t\tYou have pass this mission");}
gotoxy(10,4);
printf("\t\tpress any key continue...");
getch();
getch();
}
void WriteRecord()
{
FILE *fp;
int i=MissionNum-1;
fp=fopen("record","rt ");
fseek(fp,i*sizeof(Record),0);
fwrite(&r,sizeof(Record),1,fp);
fclose(fp);
}
void RegisterStep()
{
int i;
StepNum ;
i=(StepNum-1)%STEPMAX;
Step=DirectionKey;
}
void ReverselyMove()
{
int i;
Add ad;
i=(StepNum-1)%STEPMAX;
if(Step==0) return;
else
{
switch(Step)
{
case Key_Up:{ad.x=1;ad.y=0;MoveBack(ad);break;}
case Key_Down:{ad.x=-1;ad.y=0;MoveBack(ad);break;}
case Key_Left:{ad.x=0;ad.y=1;MoveBack(ad);break;}
case Key_Right:{ad.x=0;ad.y=-1;MoveBack(ad);break;}
}
StepNum--;Step=0;BoxMove=0;
}
}
void MoveBack(Add a) /*一定可以移動*/
{
int i=(StepNum-1)%STEPMAX;
if(BoxMove==0)
{
map-=1;InitPic(map,p.x,p.y);
p.x=p.x a.x;p.y=p.y a.y;
map =1;InitPic(map,p.x,p.y);
}
else if(BoxMove==1)
{
map-=2;InitPic(map,p.x-a.x,p.y-a.y);
map =1;InitPic(map,p.x,p.y);
p.x=p.x a.x;p.y=p.y a.y;
map =1;InitPic(map,p.x,p.y);
}
}
⑸ c語言推箱子
//空:0牆:1箱子:3巢:4箱子與巢重合:5
[MAPCOUNT]
map_count=8
[MAP1]
w=8
h=8
nest_count=4
l1=00011100
l2=00013100
l3=11110100
l4=13202111
l5=11142031
l6=00121111
l7=00131000
l8=00111000
[MAP2]
w=9
h=9
nest_count=3
l1=111110000
l2=1或殲岩40010000
l3=102210111
l4=102010131
l5=111011131
l6=011000031
l7=010001001
l8=010001111
l9=011111000
[MAP3]
w=10
h=7
nest_count=4
l1=011111110改譽0
l2=0100000111
l3=1121110001
l4=1040200201
l5=1033102011
l6=1133100010
l7=0111111110
[MAP4]
w=6
h=8
nest_count=5
l1=011110
l2=110010
l3=142010
l4=112011
l5=110201
l6=132001
l7=133531
l8=111111
//以上為地圖數據文件,保存為boxdata.dat文件
//空:0牆:1箱子:3巢:4箱子與巢重合:5
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<windows.h>
#include<string.h>
typedefstruct
{
intx;
inty;
}PT;
int**s;
PT衫御man;
PT*nest=NULL;
PTprev;
intnest_count=0;
intmap_count=0;
intgate=1;
intw,h;
charwork_dir[100]={'