چکیده:
 
در اوایل دهه ۱۹۷۰ میلادی ، زبان C ، توسط دنیس ریچی و به عنوان زبان برنامه نویسی سیستم ها طراحی شد. این زبان از دو زبان قدیمی تر بنام های BCPL و B حاصل شده است. زبان C تا سال ۱۹۷۸ منحصر به اسفتاده در لابراتوار کمپانی BELL بود تا این که توسط دو تن بنام های ریچی و کرنیه نسخه نهایی این زبان منتشر شد. به سرعت کامپایلر ها و مفسر های متعددی از C توسعه یافت اما برای جلو گیری از ناسازگاری های ایجاد شده و نیز حفظ قابلیت حمل زبان، تعاریف متحد الشکلی توسط استاندارد (ANSI (American national standard institute موسسه استاندارد ملی آمریکا ارائه گردید.
رشته جدید Game play Programming در دپارتمان فنی انستیتو ملی بازی سازی تدوین و طراحی شد.
برنامه نویسی بازی فعالیت هایی است که منجر به پیاده سازی ایده های ساخت یک بازی می شود. طراحان بازی به ایده های بازی می پردازند و هنرمندان نیز به تولید اقلام هنری مانند کاراکترها و محیط می پردازند ولی این وظیفه برنامه نویس بازی است که با استفاده از هنر برنامه نویسی٬ نرم افزار بازی را تولید کند به نحوی که ایده های طراحان بازی درکنار اقلام هنری به طرز صحیح قرار گیرد و یک بازی جذاب تولید شود. با این تعریف٬ برنامه نویسی بازی مرز میان سایر رشته های مورد نیاز برای بازی سازی است و ایجاد بازی را ممکن می سازد.
 
نقش در تکمیل ایده های طراحی و مشخص شدن المانهای هنری برای بازی خیلی مهم است.
بخشی از توانایی های برنامه نویس بازی به برنامه نویسی و طراحی فنی خوب و بهینه مربوط می شود و بخشی از توانایی های وی نیز به پیاده سازی هرچه سریعتر و کم هزینه تر یک ایده بازی (پروتوتایپ) به منظور سنجیدن جذابیت ایده مربوط است. برنامه نویس بازی پهنه بزرگی برای نمایش خلاقیت دارد و در تولید یک بازی جذاب در زمان مناسب نقش بسیار مهمی دارد.
در این زمینه هم سوالاتی در مورد برنامه نویسی  وجود دارد که می توان راحت تر برنامه نویسی خوبی داشته باشیم.
برای کار با سی++ راه ساده این است که به آن به عنوان یک فدراسیون از زبان های به هم مرتبط نگاه کرد. هنگام برنامه نویسی با سی++ باید تشخیص دهید که در کدام قسمت زبان هستید یا به عبارت درست تر در کدام زیر-زبان (sublanguage) هستید، تا با قوانین آن زیر-زبان به برنامه نویسی بپردازید. درون هر زیر-زبان قوانین سرراست، ساده و به راحتی قابل استفاده هستند. وقتی از یک زیر-زبان به زیر-زبان دیگر سوییچ می کنید، قوانین هم به طبع آن تغییر خواهد کرد. برای درک بهتر سی++ باید با زیر-زبان های آن که خوشبختانه تعدادشان به چهار می رسد، آشنا شوید.
امروزه میلیون ها برنامه نویس در جهان از زبان C++ استفاده می کنند. این زبان بسیار قدرتمند و انعطاف پذیر است به طوری که امروزه بیشتر کامپوننت ها , API ها با این زبان نوشته می شوند و همینطور برنامه نویسی هایی که نیاز به دسترسی مستقیم به سخت
افزار دارند.امروزه تمامی نرم افزار های تجاری از قبیل برنامه های گرافیکی  Maya , 3D Max , Photoshop و... برنامه های کاربردی از قبیل مبدل های صىوتی  تصىویری و موتور های بازی سازی Unreal Engine , CryEngine و .. با این زبان نوشته می شوند و حتی سیستم های عامل مانند سیمبین و IOS.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
توضیح در مورد C
•    در اوایل دهه ۱۹۷۰ میلادی ، زبان C ، توسط دنیس ریچی و به عنوان زبان برنامه نویسی سیستم ها طراحی شد. این زبان از دو زبان قدیمی تر بنام های BCPL و B حاصل شده است. زبان C تا سال ۱۹۷۸ منحصر به استفاده در لابراتوار کمپانی BELL بود تا این که توسط دو تن بنام های ریچی و کرنیه نسخه نهایی این زبان منتشر شد. به سرعت کامپایلر ها و مفسر های متعددی از C توسعه یافت اما برای جلو گیری از ناسازگاری های ایجاد شده و نیز حفظ قابلیت حمل زبان، تعاریف متحد الشکلی توسط استاندارANSI(American National Standard Institute) موسسه استاندارد ملی آمریکا ارائه گردید.
•    مفسر خود برنامه ای کامپیوتری است که برنامه ی سطح بالا، داده ی ورودی آن و برنامه ی ایجاد شده به زبان ماشین، خروجی آن را تشکیل می دهد. به طور کلی ویژگی های مهم زبان C به اختصار به شرح زیر است:
•    زبان سی به طور گسترده ای در دسترس است. مفسر های تجارتی آن در بیشتر کامپیوتر های شخصی، مینی کامپیوتر ها و نیز در کامپیوتر های بزرگ قابل استفاده اند.
•    سی زبانی است همه منظوره، ساخت یافته سطح بالا (مانند زبان پاسکال و فرتون . …) و انعطاف پذیر که برخی از خصوصیات زبانهای سطح پایین را نیز که معمولا در اسمبلی یا زبان ماشین موجود است داراست. در عین حال این زبان برای کاربردهای ویژه طراحی نشده و می توان از آن در همه ی زمینه ها، بخصوص به دلیل نزدیکی آن به زبان ماشین در برنامه نویسی سیستم، استفاده کرد. بنابراین سی بین زبان های سطح بالا و سطح پایین قرار دارد و در نتیجه اجازه می دهد که برنامه نویس خصوصیات هر دو گروه زبان را به کار برد. از این رو در بسیاری از کابردهای مهندسی به طور انحصاری زبان سی به کار می برند. (زبان های سطح بالا، دستور العمل هایی شبیه زبان انسان و پردازش فکری او داردند، همچنین یک دستور العمل زبان سطح بالا معادل چند دستور العمل به زبان ماشین است).
•   برنامه های نوشته شده به زبان c به طور کلی مستقل از ماشین یا نوع کامپیوتر است و تقریباً تحت کنترل هر سیستم عاملی اجرا می شود.
•   کامپایلرهای سی معمولا فشرده و کم حجم اند و برنامه های هدف ایجاد شده با آنها در مقایسه با سایر زبانهای برنامه سازی سطح بالا، خیلی کوچک و کار آمدند.
•    برنامه های سی در مقایسه با سایر زبانهای برنامه سازی سطح بالا، به راحتی قابل انتقال اند. دلیل آن این است که سی خیلی از ویژگی های وابسته به نوع کامپیوتر را در توابع کتابخانه ای خود منظور داشته است. بنابراین هر نسخه ازسی با مجموعه ای از توابع کتابخانه ای مخصوص به خود همراه است که بر اساس ویژگی های کامپیوتر میزبان مربوط نوشته شده است. این توابع کتابخانه ای تا حدودی استاندارد است و معمولا هر تابع کتابخانه ای در نسخه های متعدد سی به شکل یکسان در دسترس است.
•    سی روش برنامه نویسی ماژولار را پشتیبانی می کند. همچنین از نظر عملگر ها نیز زبانی قوی است که عملگرهای گوناگونی برای دستکاری روی داده ها در سطح بیت داراست.
•    به طور کلی جامعیت ، عمومیت، خوانایی، سادگی ، کارآیی، و پیمانه ای بودن که همگی از مشخصات برنامه ای ایده آل اند در زبان C پیاده سازی می شوند.
عنوان: برنامه نویسی بازی – Game play Programming
●    رشته جدید Game play Programming در دپارتمان فنی انستیتو ملی بازی سازی تدوین و طراحی شد.
●    برنامه نویسی بازی فعالیت هایی است که منجر به پیاده سازی ایده های ساخت یک بازی می شود. طراحان بازی به ایده های بازی می پردازند و هنرمندان نیز به تولید اقلام هنری مانند کاراکترها و محیط می پردازند ولی این وظیفه برنامه نویس بازی است که با استفاده از هنر برنامه نویسی٬ نرم افزار بازی را تولید کند به نحوی که ایده های طراحان بازی درکنار اقلام هنری به طرز صحیح قرار گیرد و یک بازی جذاب تولید شود. با این تعریف٬ برنامه نویسی بازی مرز میان سایر رشته های مورد نیاز برای بازی سازی است و ایجاد بازی را ممکن می سازد.
●    برای بازی های کوچکتر٬ برنامه نویس بازی ممکن است که کلیه برنامه های لازم را با یک زبان برنامه نویسی مانند ++cاز ابتدا بنویسد ولی در پروژه های بزرگتر برنامه نویسان بازی معمولا از ابزارها و موتورهای فنی موجود استفاده می کنند و منطق بازی را پیاده سازی می کنند. این منطق در موتورهایی مانند Source با زبان ++c پیاده سازی می شود٬ در موتوری مانند Unreal با زبان Unreal Script پیاده سازی می شود و در صورت استفاده از Unity می تواند زبان #c باشد.
●    در تیمهایی که فعالیت های فنی مرتبط با تولید بازی به بخش های گوناگون تخصصی تقسیم می شود٬ نقش برنامه نویس بازی (Game play Programmer) نیز یکی از نقش های اصلی است. سایر این نقش های فنی عبارتند از برنامه نویس گرافیک (Graphics Programmer)٬ برنامه نویس هوش مصنوعی (AI Programmer)٬ برنامه نویس ابزار(Tools Programmer)٬  برنامه نویس شبکه (Network Programmer) و سایر بخش های مربوط به ساخت بازی. در چنین شرایطی تمرکز برنامه نویس بازی بر پیاده سازی روابط سازنده منطق بازی و نیازهای ایجاد جذابیت در بازی است. برنامه نویس های دیگر ممکن است بر روی چالش های علمی خاص مانند پیاده سازی الگوریتم های سایه زنی٬ روش مسیریابی و یا پروتوکل های بهینه شبکه تمرکز داشته باشند ولی دغدغه اصلی برنامه نویس بازی پیاده سازی و ساخت سیستم های بازی است که ایده های مختلف را قابل آزمایش می کند٬‌ مثالهایی از این قبیل فعالیت ها عبارتند از پیاده سازی سیستم مبارزه در بازی٬‌ پیاده سازی روش مدیریت مراحل و جریان بازی٬ سیستم های دوربین بازی و روش های پیاده سازی مکانیک های اصلی بازیکن در بازی مانند حرکت و تیر زدن. کدهایی که برنامه نویس بازی تولید می کند معمولا از سایر کدهای تخصصی دیگر که عموما موتور بازی نامیده می شوند استفاده می کند و با ایجاد هماهنگی بین آنها٬‌ بازی را بوجود می آورد. سایر برنامه نویسان تخصصی در تیم بازی معمولا تعامل کمی با دیگر اعضا دارند به دلیل اینکه با صورت مساله های مشخص علمی مانند ساخت یک سیستم ذخیره اطلاعات سر و کار دارند ولی تعامل جدی و دایمی بین برنامه نویس بازی و طراحان و نویسندگان بازی از یک طرف٬‌ تیم هنری از طرف دیگر و سایر برنامه نویسان تخصصی از طرف سوم لازم است زیرا صورت مساله برنامه نویس بازی خاص  یک پروژه مشخص است و نیازهای کار او در این تعامل بین گروهها مشخص می شود. معماری پیاده سازی بازی بر عهده این شخص می باشد.
●    نیاز به برقراری ارتباط با سایراعضا و تیم های ساخت بازی برای برنامه نویس بازی مستلزم این است که وی علاوه بر برنامه نویس خوب بودن ‌از دانش خوبی در حوزه های دیگر مانند طراحی بازی٬ روایت در بازی٬ مدلسازی٬ انیمیشن و جلوه های تصویری نیز برخوردار باشد. امکان برقراری ارتباط خوب تیمی نیز برای این شخص بسیار مهم است.
●    بخشی از توانایی های برنامه نویس بازی به برنامه نویسی و طراحی فنی خوب و بهینه مربوط می شود و بخشی از توانایی های وی نیز به پیاده سازی هرچه سریعتر و کم هزینه تر یک ایده بازی (پروتوتایپ) به منظور سنجیدن جذابیت ایده مربوط است. برنامه نویس بازی پهنه بزرگی برای نمایش خلاقیت دارد و در تولید یک بازی جذاب در زمان مناسب نقش بسیار مهمی دارد. بازخورد های این نقش در تکمیل ایده های طراحی و مشخص شدن المانهای هنری برای بازی خیلی مهم است.
●    برنامه نویسان بازی در آینده کاری خود امکان انجام کار بصورت تخصصی به عنوان یک برنامه نویس بازی و یا تبدیل شدن به یک برنامه نویس تخصصی مانند برنامه نویس گرافیک را دارا می باشند.
●    با توجه به میان رشته ای بودن این تخصص و نیاز به دانش در زمینه های گوناگون٬‌ دروس متنوعی برای این دوره در نظر گرفته شده است که برخی از مهمترین این درسها عبارتند از:
 ●    برنامه نویسی بازی ۱ و ۲ (Game play Programming I & II)
○ در این درس به مبانی و اصول پیاده سازی سیستم های بازی و ارتباط عناصر مختلف سازنده بازی و فرآیندهای آن پرداخته خواهد شد. هدف این دروس ایجاد فضایی است که دانش پژوهان بتوانند تجربه های عملی به عنوان برنامه نویس بازی به منطور ساخت قسمت های مختلف مورد نیاز بازی را داشته باشند. ساخت سیستم های مدیریت ورودی٬‌ دوربین ها٬‌ سیستم های ارتقا و امتیاز٬ سیستم های مبارزه در بازی٬ معماری های شبکه٬ فرآیندهای اتوماسیون پایپ لاین های هنری و تست٬ نقش ابزار و انواع چالشهای پیاده سازی و مسایل بهینه سازی از جمله عناوین این دروس می باشد.این دروس شامل مطالب نظری به همراه کارهای عملی می باشند.
●    مبانی گرافیک کامپیوتری
●    هوش مصنوعی در بازی
○    یکی از مهمترین بخش های بازی های امروزی پیاده سازی هوش مصنوعی برای کاراکترهای دشمن٬‌ یارها و یا سیستم های کنترل کننده کلان در بازی است. در این درس به مباحت مختلف هوش مصنوعی و کاربرد آنها در بازی های ویدیویی پرداخته می شود.
●    دروس برنامه نویسی پایه
○    یکی از مهمترین عامل های موفقیت یک برنامه نویس بازی تسلط خوب بر اصول و پایه های برنامه نویسی است و در این مجموعه از درس های نظری و عملی٬ تلاش بر این است که از دانش پژوهان پایه های مستحکمی در برنامه نویسی و اصول آن داشته باشند و تجربه کافی در پیاده سازی با زبانهایی مانند ++c و #c  را داشته باشند.
عنوان: نکاتی در مورد ساخت و طراحی بازی
پیدا کردن راهی برای کسب درامد
آموزش طراحی بازی (Game Design)
موضوع داغ
ساخت بازی بصورت کاغذی
فراخوان بازی سازی
 
 
عنوان:برنامه نویسی بازی مار
#include #include #include #include #include #include

#define ESC 27 #define UPARR 72 #define LEFTARR 75 #define DOWNARR 80 #define RIGHTARR 77 #define SAVE 60 #define LOAD 61

main() { void starting(void); void make_xy(char **,char **); void getrand(char *,char *,char *,char *,char *,int,char); char getkey(char,char); void savegame(char *,char *,int,char); int loadgame(char *,char *,char *); void win_message(void);

char *x,*y,pos_x,pos_y,num,out=0,old_ch=0,ch=0,new_ch,n ew_x,new_y,old_num=0; int i,length=6;

starting(); make_xy(&x,&y); getrand(&pos_x,&pos_y,&num,x,y,length,ch);

while(!out){ if((new_ch=getkey(old_ch,ch))==ESC) out=2; if(out) break; if(new_ch==SAVE) savegame(x,y,length,old_ch); else if(new_ch==LOAD){ length=loadgame(x,y,&ch); getrand(&pos_x,&pos_y,&num,x,y,length,ch); } else ch=new_ch; new_x=x[0]; new_y=y[0]; if(ch==UPARR) new_y=y[0]-1; else if(ch==LEFTARR) new_x=x[0]-1; else if(ch==DOWNARR) new_y=y[0]+1; else if(ch==RIGHTARR) new_x=x[0]+1; old_ch=ch; if((new_x79)|(new_y>22)) out=1; /* HIGHEST POSSIBLE SCORE ÷ (78*21-6)*5 = 8160 ÷ 10,000 */ for(i=1;iif((new_x==x[i])&(new_y==y[i])){ out=1; break; } if((pos_x==new_x)&(pos_y==new_y)){ old_num+=num; /* x=(char *)realloc(x,(score+6)*sizeof(char)); y=(char *)realloc(y,(score+6)*sizeof(char)); */ /* if((x==0)|(y==0)) */ /* PROBLEM IS NOT HERE */ /* x=x;*//* SOMEHOW realloc ISN'T COPYING PROPERLY */ getrand(&pos_x,&pos_y,&num,x,y,length,ch); } if(!old_num){ gotoxy(x[length-1],y[length-1]); putchar(' '); } else{ length++; if(length==1638){ win_message(); return 0; } gotoxy(67,25); printf("Score = %5d",length-6); old_num--; x[i+1]=x[i]; y[i+1]=y[i]; } for(i=length-1;i>0;i--){ x[i]=x[i-1]; y[i]=y[i-1]; if(i==1){ gotoxy(x[i],y[i]); putchar('غ'); } } x[0]=new_x; y[0]=new_y; gotoxy(x[0],y[0]); printf("\b"); /* USE THE FUNCTION _setcursortype() */ if(out) break; delay(99); } if(out==1){ gotoxy(1,24); printf("The snake collided with the wall or with itself!\n" "GAME OVER!!\t\t(Press 'q' to terminate...)"); gotoxy(x[0],y[0]); while(toupper(getch())!='Q'); } clrscr(); printf("Hope you enjoyed the game\n\n\t\tBye!\n"); return 0; }

/*-------------------------------------------------------------------------*/

void starting() { char i;

clrscr(); /* FIRST TO DRAW A BOUNDARY for THE GAME */ putchar('ة'); for(i=0;iputchar('ح'); putchar('»'); gotoxy(1,23); putchar('ب'); for(i=0;iputchar('ح'); putchar('¼'); window(1,2,1,23); for(i=0;icprintf("؛"); window(80,2,80,23); for(i=0;icprintf("؛"); /* THE BOUNDARY IS DRAWN */ window(1,1,80,25); gotoxy(38,12); printf("غغغغغ"); /* THE "SNAKE" IS PUT for THE FIRST TIME */ gotoxy(1,24); printf("Welcome to the game of SNAKE!\n(Press any arrow key to start now," " Escape to leave at any time...)"); /* WELCOME MESSAGE */ gotoxy(43,12); while(!kbhit()); gotoxy(30,24); delline();delline(); /* REMOVING MESSAGE */ cprintf("\n( EAT THE NUMBER !! ) Score = 0"); gotoxy(43,12); /* GO TO THE HEAD OF THE SNAKE */ }

void make_xy(char **px,char **py) { char i;

*px=(char *)malloc(1638*sizeof(char)); /*EARLIER IT WAS 6, NOT 1638; BUT*/ *py=(char *)malloc(1638*sizeof(char)); /*realloc IS NOT COPYING PROPERLY*/ for(i=0;i(*px)[i]=43-i; (*py)[i]=12; } /* THE TWO ARRAYS for COORDINATES OF THE SNAKE ARE SIMULATED */ }

void getrand(char *px,char *py,char *pn,char *x,char *y,int length,char ch) { int allowed=0,i; /* i AND length MUST BE int */

while(!allowed){ allowed=1; srand((unsigned)time(0)); *px=rand()%78+2; /* GENERATING RANDOM POSITIONAL COORDINATES for */ srand((unsigned)time(0)); *py=rand()%21+2; /* PUTTING A RANDOM NUMBER */ if(ch==UPARR){ if((*px==x[0])&(*py==y[0]-1)) allowed=0; } else if(ch==DOWNARR){ if((*px==x[0])&(*py==y[0]+1)) allowed=0; } else if(ch==LEFTARR){ if((*px==x[0]-1)&(*py==y[0])) allowed=0; } else if((ch==RIGHTARR)&(*px==x[0]+1)&(*py==y[0])) allowed=0; for(i=0;(iif((*px==x[i])&(*py==y[i])) allowed=0; } /* THE RANDOM NUMBER GENERATED SHOULD NOT BE PUT ON SNAKE'S BODY */ srand((unsigned)time(0)); *pn=rand()%9+1; /* THE NUMBER */ gotoxy(*px,*py); putchar(*pn+48); gotoxy(x[0],y[0]); }

char getkey(char old_ch,char ch) { char i;

if(kbhit()) for(i=0;iwhile((ch=getch())==0); if(ch==27){ /* out=2; i=5; break;*/return ch; } if((ch!=LOAD)&(ch!=SAVE)&(ch!=UPARR)&(ch!=DOWNARR) & (ch!=LEFTARR)&(ch!=RIGHTARR)) continue; if((ch!=old_ch)|(!kbhit())) break; } else for(i=0;(idelay(100); return ch; }

void savegame(char *px,char *py,int length,char ch) { FILE *fp; int i;

rename("snake.sav","snake.bak"); fp=fopen("snake.sav","wb"); fprintf(fp,"%d %c",length,ch); for(i=0;ifprintf(fp,"%c%c",px[i],py[i]); fclose(fp); }

int loadgame(char *px,char *py,char *pch) { FILE *fp; int length,i;

fp=fopen("snake.sav","rb"); if(!fp){ clrscr(); puts("ERROR: no saved game found in current directory!!!\n\n\t\t" "Exiting...\n"); sleep(3); exit(1); } window(2,2,79,22); clrscr(); /* fscanf(fp,"%d %c ",&length,pch);*/ fscanf(fp,"%d %c",&length,pch); for(i=0;i/* fscanf(fp,"%d %d ",&px[length],&py[length]);*/ fscanf(fp,"%c%c",&px[i],&py[i]); gotoxy(px[i]-1,py[i]-1); putchar('غ'); } window(1,1,80,25); gotoxy(30,24); delline();delline(); /* REMOVING MESSAGE */ cprintf("\n( EAT THE NUMBER !! ) Score = %5d",length-6); gotoxy(px[0],py[0]); printf("\b"); fclose(fp); return length; }

void win_message() { window(1,1,80,25); gotoxy(1,24); delline();delline(); textcolor(14); cprintf("CONGRATULATION!! YOU HAVE COMPLETED THE GAME!!\r\n" "(Press any key to terminate...)"); clrscr(); textcolor(7); } //cscanf: WHEN YOU PRESS ENTER, CURSOR MOVES TO BEGINNING OF current LINE!!
 
 
 
 
 
 
منابع:
[1] توسط محد فتحی جورابی
[2] www.uc.persianv.com
[3] www.s1.picofile.com

[4] http://barnamenevis.org/showthread.php?324015-%D9%86%D8%AD%D9%88%D9%87-%DB%8C-%D9%86%D9%88%D8%B4%D8%AA%D9%86-%D8%A8%D8%A7%D8%B2%DB%8C-Snake-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-C