PDA

View Full Version : سوال: علت اشکال در اجرای این کد؟؟؟؟؟



motherboard
دوشنبه 19 اسفند 1392, 11:52 صبح
سلام.خسته نباشید.یک سری برنامه های قشنگ توی اینترنت وجود داره که مربوط به ++c است. اما هر وقت اجرا می کنم یه نقصی توش داره.یه سایتی وجود داره که لینکش رو در زیر گذاشتم که کد های قشنگی رو اموزش داده.کسانی که اطلاع نداشتند حتما یه سر به این سایت بزنن.مثلا برنامه زیر از همون سایته که دوست دارم اجراش کنم اما همیشه باید یه خطایی بده.می خواستم منو راهنمایی کنید.:گریه:
http://happycodings.com/




#include<iostream>
#include<conio.h>
#include<graphics.h>
#include<dos.h>
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
#include<string.h>
using namespace std;
class Snake
{
int p1,p2,v1,v2,v3,e1,e2,prev,now,n,colr,dsp,cnt,dly,m ;
int stp,egGen;
int xr,yr;
void caught();
public:
long scr;
int strtX,strtY,endX,endY;
int pos[100][2];
void show();
void init();
void egg();
void transpose();
void gnrtCond();
void gnrtUnCond();
void check();
void checkEgg();
void move();
void chngDir();
void sndEt();
void sndCgt();
int test();
void score();
Snake();
Snake(Snake*);
~Snake();
};
Snake::Snake()
{
}
Snake::~Snake()
{

}
void Snake::checkEgg()
{
if((e1 == p1) && (e2 == p2))
{sndEt();
egg();
dly--;
score();
n++;
}
}
void Snake::sndEt()
{nosound();
sound(2500);
delay(2);
nosound();
}
void Snake::sndCgt()
{nosound();
for(int x=1000;x>0;x--)
{sound(x);
delay(1);
}
nosound();
}
void Snake::score()
{ char *p;

ltoa(scr,p,10);
settextstyle(8,0,1);
setcolor(0);
outtextxy(585,40,p);
if(egGen != 1){
scr = scr + dly / 10;
}
ltoa(scr,p,10);
setcolor(10);
outtextxy(585,40,p);

}
void Snake::gnrtCond()
{if(n < 367)
{if(now == 8 && (prev != 8 && prev != 2))
{pos[0][0] = p1;
pos[0][1] = p2 - dsp;
prev = now;
}
if(now == 4 && (prev != 4 && prev != 1))
{pos[0][0] = p1 + dsp;
pos[0][1] = p2;
prev = now;
}
if(now == 2 && (prev != 8 && prev != 2))
{pos[0][0] = p1;
pos[0][1] = p2 + dsp;
prev = now;
}
if(now == 1 && (prev != 1 && prev != 4))
{pos[0][0] = p1 - dsp;
pos[0][1] = p2;
prev = now;
}
}
}
void Snake::gnrtUnCond()
{
if( prev == 8 )
{pos[0][0] = p1;
pos[0][1] = p2 - dsp;
}
if( prev == 4 )
{pos[0][0] = p1 + dsp;
pos[0][1] = p2;
}
if( prev == 2 )
{pos[0][0] = p1;
pos[0][1] = p2 + dsp;
}
if( prev == 1 )
{pos[0][0] = p1 - dsp;
pos[0][1] = p2;
}
p1 = pos[0][0];
p2 = pos[0][1];
}
void Snake::check()
{
if(p1 > endX)
{p1 = strtX;}
else if(p1 < strtX)
{p1 = endX;}

if(p2 > endY)
{p2 = strtY;}
else if(p2 < strtY)
{p2 = endY;}

pos[0][0] = p1;
pos[0][1] = p2;
for(int i = 1;i < n;i++)
{ if(p1 == pos[i][0] && p2 == pos[i][1])
{caught();
break;
}
}
}
void Snake::show()
{
int x = getcolor();
if(egGen != 1)
{
setcolor(getbkcolor());
setfillstyle(1,getbkcolor());
fillellipse(v1,v2,yr,yr);
}
else
egGen = 0;
if(egGen == 2)
egGen--;
setcolor(colr);
setfillstyle(1,9);
if(now == 8 || now == 2)
fillellipse(pos[0][0],pos[0][1],xr,yr);
else if(now == 4 || now == 1)
fillellipse(pos[0][0],pos[0][1],yr,xr);
setcolor(x);
}
void Snake::transpose()
{ int i,j,x,y;
p1 = pos[0][0];
p2 = pos[0][1];
if(!egGen){
v1 = pos[n-1][0];
v2 = pos[n-1][1];
}
else
egGen = 0;
for(i = n-1;i >= 1;i--)
{pos[i][0] = pos[i-1][0];
pos[i][1] = pos[i-1][1];
}
}
void Snake::move()
{ int st = 0;
do{
if(!kbhit())
{checkEgg();
if(!st)
show();
else
st = 0;
delay(dly/4);
transpose();
delay(dly/4);
gnrtUnCond();
delay(dly/4);
check();
delay(dly/4);
}
else if(stp){
chngDir();
gnrtCond();
check();
show();
st = 1;
}
}while(stp);
}
void Snake::init()
{time_t tm;
srand(time(&tm));
dsp = 20;
n = 5;
prev = 4;
for(int i = 4;i >= 0;i--)
{pos[i][0] = 201 + (n - i - 1) * dsp;
pos[i][1] = 301;
}
strtX = 21;
strtY = 21;
endX = 481;
endY = 361;
colr = 14;
now = prev;
dsp = 20;
stp = 111;
cnt = -1;
scr = 0;
dly = 150;
xr = 3;
yr = 9;
egg();
egGen = 1;
score();
int x = getcolor();
setlinestyle(0,1,3);
setcolor(15);
rectangle(strtX-15,strtY-15,endX+15,endY+15);
rectangle(endX+25,strtY-15,getmaxx()-15,endY+15);
rectangle(strtX-15,endY+25,getmaxx()-15,getmaxy()-5);
line(endX+25,strtY+75,getmaxx()-15,strtY+75);
line(endX+25,strtY+200,getmaxx()-15,strtY+200);
line(endX+25,strtY+275,getmaxx()-15,strtY+275);
setlinestyle(0,1,1);
settextstyle(8,0,1);
setcolor(11);
outtextxy(514,40,"SCORE");
setcolor(14);
settextstyle(11,0,5);
outtextxy(524,110," CONTROLS ");
outtextxy(522,135,"p = PAUSE");
outtextxy(522,155,"g = RESUME");
outtextxy(522,175,"e = EXIT");
outtextxy(513,195,"ARROWS");
outtextxy(512,205," -MOVEMENT");
setcolor(14);
settextstyle(4,0,9);
outtextxy(getmaxx()-500,getmaxy()-110,"SNAKE");
settextstyle(8,0,1);
setcolor(x);
}
void Snake::caught()
{
stp = 0;
sndCgt();
for(int i=0;i<=7;i++)
{if(i%2)
{setcolor(10);
outtextxy(512,250,"GAME OVER");
delay(900);
}
else
{setcolor(0);
outtextxy(512,250,"GAME OVER");
delay(500);
}
}
sleep(1);
}
void Snake::chngDir()
{int clr;
fillsettingstype *p;
char x = getch();
if(x == 72)
now = 8;
else if(x == 77)
now = 4;
else if(x == 80)
now = 2;
else if(x == 75)
now = 1;
else if(x == 'e')
caught();
else if(x == 'p')
{//int y = getcolor();
int twnkl = 1;
settextstyle(11,0,9);
while(1)
{if(kbhit())
{int c = getch();
if(c == 'g')
{clr = getcolor();
setcolor(0);
rectangle(endX+40,endY-10,getmaxx()-35,getmaxy()-160);
outtextxy(endX+60,endY-29,"PAUSE");
break;
}
}
else
{if(twnkl%2)
{clr = getcolor();
setcolor(10);
rectangle(endX+40,endY-10,getmaxx()-35,getmaxy()-160);
outtextxy(endX+60,endY-29,"PAUSE");
setcolor(clr);
delay(1000);
}
else
{
clr = getcolor();
setcolor(0);
rectangle(endX+40,endY-10,getmaxx()-35,getmaxy()-160);
outtextxy(endX+60,endY-29,"PAUSE");
delay(1000);
}
}
twnkl++;
}
settextstyle(8,0,1);
}
}
Snake::Snake(Snake *p)
{
*p=NULL;
}
void Snake::egg()
{ do
{e1 = (rand() % 100) * dsp + strtX;
e2 = (rand() % 100) * dsp + strtY;
}while(test());
int x = getcolor();
setcolor(7);
setfillstyle(1,random(15)+1);
fillellipse(e1,e2,xr+2,xr+2);
setcolor(x);
egGen = 2;
}
int Snake::test()
{ for(int i=0;i<n;i++)
{if(e1 == pos[i][0] && e2 == pos[i][1])
break;
if(v1 == e1 && v2 == e2)
break;
if((e1 >= endX+1) || (e2 >= endY+1))
break;
}
if(i != n)
return 1;
else
return 0;
}

int main()
{Snake snk;
int gd=DETECT,gm,i,j,k,x,y;
clrscr();
initgraph(&gd,&gm,"E:\Turboc3");
snk.init();
snk.move();

closegraph();
restorecrtmode();
}

fahimeh1512
دوشنبه 19 اسفند 1392, 21:31 عصر
حالا چه خطایی داده؟

motherboard
دوشنبه 19 اسفند 1392, 22:41 عصر
حالا چه خطایی داده؟

خطاهای زیادی داره.البته این کدی که در بالا میبینید یه اصلاحاتی رو انجام دادم تا خطاهاش کم تر شده.برنامه هایی که در لینک هست سورس های قشنگی رو داره ولی حیف که خطا میده.از عمده خطاهاش ناشناس بودن برخی عبارات است.شما نیز یک تستی بفرمایید و اگر متوجه علت خطاها و رفع انها شدید مرا هم راهنمایی کنید.با تشکر.

SEZAR.CO
سه شنبه 20 اسفند 1392, 17:56 عصر
با عرض سلام
میشه بگید از چه کام\ایلری استفده میکنید
:)

motherboard
سه شنبه 20 اسفند 1392, 18:02 عصر
با عرض سلام
میشه بگید از چه کام\ایلری استفده میکنید
:)

از dev ++c استفاده می کنم و از قسمت empty project .اگر برنامه رو با dev اجرا کرده باشید با اینکه سورسش به اصطلاح اورجینال و بدون اشتباه می باشد ولی خطاهای متعددی میده.من هروقت این گونه برنامه هارو خواستم اجرا کنم همیشه یه نقصی داشته.:لبخندساده:

Tiyana
چهارشنبه 21 اسفند 1392, 14:23 عصر
یکی از ارور هایی که میده به خاطر کتابخونه graphics.h هستش چون این لایبرری تقریبا منسوخ شده و دیگه استفاده ی خاصی ازش نمیشه به طور پیش فرض داخل کامپایلرای جدید مثل dev نیست اما میشه با یه تنظیماتی اضافش کرد....

توضیحات:

Installation Notes:




[*=left] Install Dev-C++‎‎‎‎. I installed from the Version 4.9.9.2 Setup File (http://www.cs.colorado.edu/%7Emain/bgi/dev-C++‎‎‎‎/devcpp-4.9.9.2.setup.exe).
[*=left] Download graphics.h (http://www.cs.colorado.edu/%7Emain/bgi/dev-C++‎‎‎‎/graphics.h) to the include/ subdirectory of the Dev-C++‎‎‎‎ directories.
[*=left] Download libbgia. (http://www.cs.colorado.edu/%7Emain/bgi/dev-C++‎‎‎‎/libbgi.a) to the lib/ In order to use the WinBGIm subdirectory of the Dev-C++‎‎‎‎ directories.
[*=left] Whenever you #include <graphics.h> in a program, you must instruct the linker to link in certain libraries. The command to do so from Dev-C++‎‎‎‎ is Alt-P. Choose the Parameters tab from the pop-up window and type the following into the Linker area: -lbgi
-lgdi32
-lcomdlg32
-luuid
-loleaut32
-lole32
You can now compile and run programs that use the WinBGIm graphics library, such as this one that opens a small window, draws a circle and waits for the user to press a key: #include <graphics.h>

int main( )
{
initwindow(400, 300, "First Sample");
circle(100, 50, 40);
while (!kbhit( ))
{
delay(200);
}
return 0;
}

motherboard
چهارشنبه 21 اسفند 1392, 15:40 عصر
یکی از ارور هایی که میده به خاطر کتابخونه graphics.h هستش چون این لایبرری تقریبا منسوخ شده و دیگه استفاده ی خاصی ازش نمیشه به طور پیش فرض داخل کامپایلرای جدید مثل dev نیست اما میشه با یه تنظیماتی اضافش کرد....

توضیحات:

Installation Notes:




[*=left] Install Dev-C++‎‎‎‎‎. I installed from the Version 4.9.9.2 Setup File (http://www.cs.colorado.edu/%7Emain/bgi/dev-C++‎‎‎‎‎/devcpp-4.9.9.2.setup.exe).
[*=left] Download graphics.h (http://www.cs.colorado.edu/%7Emain/bgi/dev-C++‎‎‎‎‎/graphics.h) to the include/ subdirectory of the Dev-C++‎‎‎‎‎ directories.
[*=left] Download libbgia. (http://www.cs.colorado.edu/%7Emain/bgi/dev-C++‎‎‎‎‎/libbgi.a) to the lib/ In order to use the WinBGIm subdirectory of the Dev-C++‎‎‎‎‎ directories.
[*=left] Whenever you #include <graphics.h> in a program, you must instruct the linker to link in certain libraries. The command to do so from Dev-C++‎‎‎‎‎ is Alt-P. Choose the Parameters tab from the pop-up window and type the following into the Linker area: -lbgi
-lgdi32
-lcomdlg32
-luuid
-loleaut32
-lole32
You can now compile and run programs that use the WinBGIm graphics library, such as this one that opens a small window, draws a circle and waits for the user to press a key: #include <graphics.h>

int main( )
{
initwindow(400, 300, "First Sample");
circle(100, 50, 40);
while (!kbhit( ))
{
delay(200);
}
return 0;
}


از پاسخی که دادید ممنونم.ولی هدر فایل گرافیکم فعال بود.:لبخندساده: