PDA

View Full Version : سوال: اضافه کردن امکاناتی به maze



1developer
شنبه 15 خرداد 1389, 10:30 صبح
با سلام!
برای پروژه پایان ترم یک Maze نوشتم ولی چند تا مشکل دارم (قبلش کد را ببینید.)
1-برای هر حرکت در الگوریتمی که نوشتم کل مسیر دوباره بازآوری میشه و clrscr مسیر رو پاک میکنه که زیاد جالب نیست، آیا می تونم با gotoxy دیگه از clrscr استفاده نکنم و اگه آره کمی در مورد نحوه عملکرد gotoxy توضیح دهید!
2-چطور میشه با استفاده از time.h اجرا بازی را محدود کرد مثلا اگه 1 دقیقه شد پیامی با عنوان game over نمایش داده بشه!


#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
char mch[20][40];
int m[20][40];

void paint();
void move();
void main()
{
int d=1;
printf("hello.welcom to maze game.you can play with arrow key.continu by press any key.\n");
paint();
move();
}
void paint(){
int k,r;
int m[20][40]={
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{2,2,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0 ,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0},
{1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,1,1 ,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1},
{1,0,0,0,1,0,1,1,0,1,0,1,1,1,0,1,1,1,0,1,0,0,0,1,1 ,1,0,1,1,1,0,0,0,0,1,1,0,0,1,1},
{1,1,1,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,1,0,1,1,1,0 ,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1},
{1,0,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,0,1,0,0,0 ,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1},
{1,0,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,0,0,0,0,1,0,1,0 ,1,0,1,1,0,0,0,0,0,1,1,0,1,1,1},
{1,0,1,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,1,1,0,1,0,1,0 ,1,0,1,1,0,1,1,1,0,0,0,0,1,1,1},
{1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1,0,0,1,1,0,0,0,1,0 ,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1},
{1,1,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,0,1,0 ,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1},
{1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1 ,0,0,0,1,0,1,1,0,0,1,1,1,0,1,1},
{1,1,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,0 ,1,1,0,1,0,1,1,0,1,1,1,1,0,1,1},
{1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,0,1,0 ,1,1,0,0,0,1,1,0,1,1,1,0,0,1,1},
{1,1,0,1,1,1,1,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,0,1,0 ,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1},
{1,1,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,0 ,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1},
{1,1,1,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,1,0,0,0 ,1,0,1,0,1,0,1,1,1,1,1,0,1,1,1},
{1,1,0,0,0,1,1,0,1,1,1,0,0,0,0,1,0,1,1,0,1,0,0,1,0 ,0,0,1,0,1,0,1,1,1,1,1,0,1,1,1},
{1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,0,0,0,1,1,1 ,0,1,1,0,1,0,0,0,0,1,1,0,1,1,1},
{1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1 ,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
};

for(k=0;k<20;k++){
for(r=0;r<40;r++)
{
if(m[k][r]==0){
mch[k][r]=32;
printf("%c",mch[k][r]);
/* if(i==1 && j==0){
mch[i][j]=(-2);
printf("%c",mch[i][j]);
}*/
/* if(i==1 && j==1){
mch[i][j]=(-2);
printf("%c",mch[i][j]);
}*/
}
if(m[k][r]==1)
{
mch[k][r]=(-37);
printf("%c",mch[k][r]);
}
if(m[k][r]==2){
mch[k][r]=42;
printf("%c",mch[k][r]);
}
}
printf("\n");
}

}

void move(){
int k=0,r=0;
int i=1,j=1;
int x=2,y=2;
char c;

do
{
c=getche();
if(c==97) //left
{
if(mch[i][j-1]==42){
j-=1;
}
if(mch[i][j-1]==32 && mch[i-1][j]==42)
{
mch[i-1][j]=32;
mch[i][j-1]=42;
j-=1;
}
if(mch[i][j-1]==32 && mch[i+1][j]==42){
mch[i+1][j]=32;
mch[i][j-1]=42;
j-=1;
}
if(mch[i][j-1]==32 && mch[i][j+1]==42){
mch[i][j-1]=42;
mch[i][j+1]=32;
j-=1;
}
clrscr();
printf("\n");
for(k=0;k<20;k++){
for(r=0;r<40;r++){
printf("%c",mch[k][r]);
}
printf("\n");
}
}
else if(c==100) //right
{
if(mch[i][j+1]==32 && mch[i][j-1]==42){
mch[i][j-1]=32;
mch[i][j+1]=42;
printf("%c",42);
j+=1;
}
if(mch[i][j+1]==42){
j+=1;
}
if(mch[i][j+1]==32 && mch[i-1][j]==42){
mch[i][j+1]=42;
mch[i-1][j]=32;
printf("%c",32);
j+=1;}
if(mch[i][j+1]==32 && mch[i+1][j]==42){
mch[i][j+1]=42;
mch[i+1][j]=32;
j+=1;}
clrscr();
printf("\n");
for(k=0;k<20;k++){
for(r=0;r<40;r++){
printf("%c",mch[k][r]);
}
printf("\n");
}
}
else if(c==115){
if(mch[i+1][j]==32 && mch[i-1][j]==42){//jeloo
mch[i-1][j]=32;
mch[i+1][j]=42;
i+=1;
}
if(mch[i+1][j]==42){
i+=1;
}
if(mch[i+1][j]==32 && mch[i][j-1]==42){//down
mch[i+1][j]=42;
mch[i][j-1]=32;
i+=1;
}
if(mch[i+1][j]==32 && mch[i][j+1]==42){
mch[i+1][j]=42;
mch[i][j+1]=32;
i+=1;
}
clrscr();
printf("\n");
for(k=0;k<20;k++){
for(r=0;r<40;r++){
printf("%c",mch[k][r]);
}
printf("\n");
}
}
else if(c==119){
if(mch[i-1][j]==32 && mch[i+1][j]==42){//jeloo
mch[i-1][j]=42;
mch[i+1][j]=32;
i-=1;
}
if(mch[i-1][j]==42){
i-=1;
}
if(mch[i-1][j]==32 && mch[i][j-1]==42){//down
mch[i-1][j]=42;
mch[i][j-1]=32;
i-=1;
}
if(mch[i-1][j]==32 && mch[i][j+1]==42){
mch[i-1][j]=42;
mch[i][j+1]=32;
i-=1;
}
clrscr();
printf("\n");
for(k=0;k<20;k++){
for(r=0;r<40;r++){
printf("%c",mch[k][r]);
}
printf("\n");
}
}
if(i==1&&j==39)
{
printf(" you win ");
break;
}

}while(1);
}