當前位置:首頁 » 編程軟體 » c編程推箱子

c編程推箱子

發布時間: 2025-10-05 01:56:16

A. 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]={''};
chardata_file[100]={''};

voidGetDataFromFile();
voidGetIntFromLineString(char*ch,intlen,inti);
voidDraw();
boolis_Success();

intmain()
{
printf("Loading...");
CONSOLE_CURSOR_INFOcci;
cci.bVisible=FALSE;
cci.dwSize=sizeof(cci);
HANDLEhandle=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorInfo(handle,&cci);

_getcwd(work_dir,100);
strcpy(data_file,work_dir);
strcat(data_file,"\boxdata.dat");
if(access(data_file,0))
{
printf("Don'tfindmapdatafile!");
getch();
exit(0);
}

while(1)
{
GetDataFromFile();
intsel=0;
Draw();
while(1)
{
fflush(stdin);
sel=getch();
if(sel==224)
{
sel=getch();
prev=man;
if(sel==77)//right
{
if(s[man.y][man.x+1]==2)
{
if(s[man.y][man.x+2]==0||s[man.y][man.x+2]==3)
{
s[man.y][man.x+2]=2;
s[man.y][man.x+1]=4;
s[man.y][man.x]=0;
}
else
{
continue;
}
}
elseif(s[man.y][man.x+1]==0||s[man.y][man.x+1]==3)
{
s[man.y][man.x+1]=4;
s[man.y][man.x]=0;
}
else
{
continue;
}
}
elseif(sel==80)//down
{
if(s[man.y+1][man.x]==2)
{
if(s[man.y+2][man.x]==0||s[man.y+2][man.x]==3)
{
s[man.y+2][man.x]=2;
s[man.y+1][man.x]=4;
s[man.y][man.x]=0;
}
else
{
continue;
}
}
elseif(s[man.y+1][man.x]==0||s[man.y+1][man.x]==3)
{
s[man.y+1][man.x]=4;
s[man.y][man.x]=0;
}
else
{
continue;
}
}
elseif(sel==72)//up
{
if(s[man.y-1][man.x]==2)
{
if(s[man.y-2][man.x]==0||s[man.y-2][man.x]==3)
{
s[man.y-2][man.x]=2;
s[man.y-1][man.x]=4;
s[man.y][man.x]=0;
}
else
{
continue;
}
}
elseif(s[man.y-1][man.x]==0||s[man.y-1][man.x]==3)
{
s[man.y-1][man.x]=4;
s[man.y][man.x]=0;
}
else
{
continue;
}
}
elseif(sel==75)//left
{
if(s[man.y][man.x-1]==2)
{
if(s[man.y][man.x-2]==0||s[man.y][man.x-2]==3)
{
s[man.y][man.x-2]=2;
s[man.y][man.x-1]=4;
s[man.y][man.x]=0;
}
else
{
continue;
}
}
elseif(s[man.y][man.x-1]==0||s[man.y][man.x-1]==3)
{
s[man.y][man.x-1]=4;
s[man.y][man.x]=0;
}
else
{
continue;
}
}
inti;
for(i=0;i<nest_count;i++)
{
if(nest[i].x==prev.x&&nest[i].y==prev.y)
{
s[prev.y][prev.x]=3;
break;
}
}
Draw();
if(is_Success()==true)
{
gate++;
if(gate>map_count)
{
printf(" mapisend!");
fflush(stdin);
getch();
exit(0);
}
break;
}
}
elseif(sel=='q'||sel=='Q')
{
exit(0);
}
elseif(sel=='r'||sel=='R')
{
break;
}
}
}
return0;
}

voidGetDataFromFile()
{
inti;
if(s!=NULL)
{
if(h!=0)
{
for(i=0;i<h;i++)
{
free(s+i);
}
free(s);
}
else
{
printf("fail");
getch();
exit(0);
}
}

if(nest!=NULL)
{
free(nest);
}
map_count=GetPrivateProfileInt("MAPCOUNT","map_count",0,data_file);

if(map_count<gate)
{
printf("gatefinish!");
getch();
exit(0);
}
charsection[20]={''};
sprintf(section,"MAP%d",gate);
nest_count=GetPrivateProfileInt(section,"nest_count",0,data_file);
nest=(PT*)malloc(sizeof(PT)*nest_count);

w=GetPrivateProfileInt(section,"w",0,data_file);
h=GetPrivateProfileInt(section,"h",0,data_file);
if(w<5||h<5||nest_count<1)
{
printf("worhorbox_nestdataerror!");
getch();
exit(0);
}
s=(int**)malloc(sizeof(int*)*h);
for(i=0;i<h;i++)
{
*(s+i)=(int*)malloc(sizeof(int)*w);
}

charkey[20]={''};
charline[50]={''};
intlen;
intj;
for(i=0;i<h;i++)
{
memset(line,'',50);
sprintf(key,"l%d",i+1);
GetPrivateProfileString(section,key,"",line,50,data_file);
len=strlen(line);
if(len>0)
{
line[len++]='';
line[len]='';
}
GetIntFromLineString(line,strlen(line),i);
}
len=0;
for(i=0;i<h;i++)
{
for(j=0;j<w;j++)
{
if(s[i][j]==3)
{
nest[len].y=i;
nest[len].x=j;
len++;
}
elseif(s[i][j]==5)
{
nest[len].y=i;
nest[len].x=j;
len++;
s[i][j]=2;
}
}
}
}

voidstrmyncpy(char*source,char*target,intbegin,intend)
{
inti=0;
while(1)
{
if(source[begin]!='')
{
target[i]=source[begin];
}
i++;
begin++;
if(begin>end)
{
target[i]='';
break;
}
}
}

voidGetIntFromLineString(char*ch,intlen,inti)
{
intj=0;
charc[5]={''};
intb=0,e=0;
while(e<len)
{
if(ch[e]=='')
{
memset(c,'',5);
strmyncpy(ch,c,b,e);
b=e+1;
e++;
s[i][j++]=atoi(c);
}
e++;
}
}

voidDraw()
{
inti,j,k;
boolflag=false;
system("cls");
printf(" ");
for(i=0;i<h;i++)
{
printf(" ");
for(j=0;j<w;j++)
{
if(s[i][j]==0)
{
printf("");
}
elseif(s[i][j]==1)
{
printf("■");
}
elseif(s[i][j]==2)
{
printf("★");
}
elseif(s[i][j]==3)
{
printf("☆");
}
elseif(s[i][j]==4)
{
printf("◎");
man.x=j;
man.y=i;
}
}
}
}

boolis_Success()
{
inti,j;
for(i=0;i<h;i++)
{
for(j=0;j<w;j++)
{
if(s[i][j]==3)
{
returnfalse;
}
}
}
for(i=0;i<nest_count;i++)
{
if(man.x==nest[i].x&&man.y==nest[i].y)
{
returnfalse;
}
}
returntrue;
}

B. 想問一下C語言的應用領域有哪些

C語言具有高級語言的特點,又具有匯編語言的特點,所以可以作為工作系統設計語言,編寫系統應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬體的應用程序。其應用范圍極為廣泛,不僅僅是在軟體開發上,各類科研項目也都要用到C語言。下面列舉了C語言一些常見的領域。
(1)應用軟體。Linux操作系統中的應用軟體都是使用C語言編寫的,因此這樣的應用軟體安全性非常高。
(2)對性能要求嚴格的領域。一般對性能有嚴格要求的地方都是用C語言編寫的,比如網路程序的底層和網路伺服器端底層、地圖查詢等。
(3)系統軟體和圖形處理。C語言具有很強的繪圖能力和可移植性,並且具備很強的數據處理能力,可以用來編寫系統軟體、製作動畫、繪制二維圖形和三維圖形等。
(4)數字計算。相對於其他編程語言,C語言是數字計算能力超強的高級語言。
(5)嵌入式設備開發。手機、PDA等時尚消費類電子產品相信大家都不陌生,其內部的應用軟體、游戲等很多都是採用C語言進行嵌入式開發的。
(6)游戲軟體開發。游戲大家更不陌生,很多人就是由玩游戲而熟悉了計算機。利用C語言可以開發很多游戲,比如推箱子、貪吃蛇等。
1.上層開發
其實用 C 語言做上層應用程序開發和寫界面不是明智的選擇,比如 Windows 上面,畫個窗口,寫個消息處理函數,但是較為麻煩。
2.底層開發
C 語言主要的用途還是底層編程,例如系統軟體:編譯器,JVM,驅動,操作系統內核,還有各種嵌入式軟體,固件。
3. 總結
所以說,C 語言往深了學,要學習操作系統,雖然 C 語言和操作系統之間沒有必然聯系,但是別忘了,連操作系統都是 C 語言寫的,C 語言的主要用途也在底層開發上面。

C. 求助啊,誰有有趣的c語言小程序,並且要有源代碼!!

一個貪吃蛇C源代碼,本人稍加優化,練手應當不錯。
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <Windows.h>

#define WIDTH 78 //地圖的寬,x軸
#define HEIGHT 26 //地圖的高,y軸
int dire=3; //方向變數,初值為向「左」
int Flag=0; //判斷是否吃了食物的標志
int score=0; //玩家得分

struct foods{ int x;
int y;
}food; //結構體food有2個成員
struct snakes{int len;
int speed;
int x[100];
int y[100];
}snake; //結構體snake有4個成員

void gotoxy( int x,int y) //獲得句柄,才能控制游標移動
{ COORD coord;
coord.X=x;
coord.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}

void gotoxy( int x,int y); //以下聲明要用到的幾個自編函數
void csh( );
void keyDown( );
void Move( );
void putFood( );
int pdOver( );

int main( ) //主函數
{ csh( );
while(1)
{ keyDown( );
Move( );
putFood( );
if(pdOver( ))
{system(「cls」);
gotoxy(WIDTH/2+1,HEIGHT/2);
printf(「游戲結束!T__T」);
gotoxy(WIDTH/2+1,HEIGHT/2+1);
printf(「玩家總分:%d分」,score);
getch( );
break; }
Sleep(snake.speed);
}
return 0;
}

void csh( ) //初始化界面
{ int i;
gotoxy(0,0);
CONSOLE_CURSOR_INFO cursor_info={1,0}; //游標值設為0就隱藏了
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);

for(i=0;i<=WIDTH;i=i+2) //橫坐標要為偶數,因為這里要列印的字元佔2個位置
{ gotoxy(i,0); //列印上邊框
printf("■");
gotoxy(i,HEIGHT); //列印下邊框
printf("■");
}
for(i=1;i<HEIGHT;i++)
{ gotoxy(0,i); //列印左邊框
printf("■");
gotoxy(WIDTH,i); //列印右邊框
printf("■");
}
while(1)
{ srand((unsigned int)time(NULL)); //設定種子為當前時間
food.x=rand()%(WIDTH-4)+2;
food.y=rand()%(HEIGHT-2)+1;
if(food.x%2==0)break;
}
gotoxy(food.x,food.y); //到食物坐標處列印初試食物
printf("●");

snake.len=3; //蛇身長
snake.speed=350; //刷新蛇的時間,即是移動速度
snake.x[0]=WIDTH/2+1; //蛇頭橫坐標為偶數
snake.y[0]=HEIGHT/2; //蛇頭縱坐標
gotoxy(snake.x[0], snake.y[0]); //列印蛇頭
printf("■");

for(i=1;i<snake.len;i++)
{ snake.x[i]=snake.x[i-1]+2;
snake.y[i]=snake.y[i-1];
gotoxy(snake.x[i],snake.y[i]); //列印蛇身
printf("■");
}
return;
}

void keyDown( ) //按鍵操作
{ int key;
if(kbhit( )) //如有按鍵輸入才執行下面操作
{ key=getch( );
if(key==224) //值為224表示按下了方向鍵,下面要再次獲取鍵值
{ key=getch( );
if(key==72&&dire!=2)dire=1; //72為向上
if(key==80&&dire!=1)dire=2; //80為向下
if(key==75&&dire!=4)dire=3; //75為向左
if(key==77&&dire!=3)dire=4; //77為向右
}
if(key==13)
{ while(1) if((key=getch( ))==13) break; } //13為回車鍵,這兒用來暫停
}
}

void Move( ) //蛇移動一節
{ if(Flag==0) //如沒吃食物,才執行下面操作擦掉蛇尾
{ gotoxy(snake.x[snake.len-1],snake.y[snake.len-1]);
printf(" ");
}
int i;
for (i = snake.len - 1; i > 0; i--) //從蛇尾起每節存儲前一節坐標值(蛇頭除外)
{ snake.x[i]=snake.x[i-1];
snake.y[i]=snake.y[i-1];
}
switch (dire) //以下判斷蛇頭該往哪個方向移動,並獲取最新坐標值
{ case 1: snake.y[0]--; break;
case 2: snake.y[0]++; break;
case 3: snake.x[0]-=2; break;
case 4: snake.x[0]+=2; break;
}
gotoxy(snake.x[0], snake.y[0]); //列印蛇頭
printf("■");
if (snake.x[0] == food.x && snake.y[0] == food.y) //如吃到食物執行以下操作
{ snake.len++; score += 50; snake.speed -= 5; Flag = 1;}
else Flag = 0;
if(snake.speed<160) snake.speed= snake.speed+5; //作弊碼,不讓速度無限加快
}

void putFood( ) //投放食物
{ if(Flag == 1) //如吃到食物才執行以下操作,生成另一個食物
{ while (1)
{ int i,n= 1;
srand((unsigned int)time(NULL)); //設定當前時間,接下產生食物坐標值
food.x = rand( ) % (WIDTH - 4) + 2;
food.y = rand( ) % (HEIGHT - 2) + 1;
for (i = 0; i < snake.len; i++) //隨機生成的食物不能在蛇的身體上
{ if (food.x == snake.x[i] &&food.y == snake.y[i])
{ n= 0; break;}
}
if (n && food.x % 2 == 0) break; //n不為0且橫坐標為偶數,食物坐標取值成功
}
gotoxy(food.x, food.y); //游標到取得的坐標處列印食物
printf("●");
}
return;
}

int pdOver( ) //判斷游戲是否結束
{ int i;
gotoxy(2,HEIGHT+1); //以下列印一些其它信息
printf(「暫停鍵:Enter.」);
gotoxy(2,HEIGHT+2);
printf(「游戲得分:%d」,score);
if (snake.x[0] == 0 || snake.x[0] == WIDTH) return 1; //蛇頭觸碰左右邊界
if (snake.y[0] == 0 || snake.y[0] == HEIGHT) return 1; //蛇頭觸碰上下邊界
for (i = 1; i < snake.len; i++)
{ if (snake.x[0] == snake.x[i] && snake.y[0] == snake.y[i]) return 1; } //蛇頭觸碰自身
return 0;
}

熱點內容
我的世界天堂伺服器 發布:2025-10-05 04:08:46 瀏覽:464
androidlost 發布:2025-10-05 04:02:44 瀏覽:466
linuxjdk安裝tar 發布:2025-10-05 03:58:25 瀏覽:596
ftp伺服器測試 發布:2025-10-05 03:56:59 瀏覽:401
php圖片流顯示 發布:2025-10-05 03:50:38 瀏覽:325
pythonxml保存 發布:2025-10-05 03:41:09 瀏覽:776
androidsocket非同步 發布:2025-10-05 03:41:09 瀏覽:46
安卓手機號碼怎麼導入蘋果 發布:2025-10-05 03:36:52 瀏覽:731
fastcgipassphp 發布:2025-10-05 03:36:52 瀏覽:357
凱撒密碼加密c語言 發布:2025-10-05 03:30:03 瀏覽:817