آموزش زبان ++C و #C

alprh

کاربر سایت
Sep 28, 2005
940
نام
Alprh The Drawranger
از اونجایی که ساخت بازی ها احتیاج به یادگیری زبان های low level ونزدیک به زبان ماشین داره این تایپیک رو راه اندازی کردم تا دوستانی که با این زبان آشنایی دارن مقالاتی برای آشنایی و یادگیری دیگران بگذارن . امیده که بقیه دوستان و همچنین خودم آشنایی بیشتری به این زبان پیدا کنیم و در راه ساخت یه بازی موفق کاملا ایرانی به کار بگیریم.
 

Dr.XJ

کاربر سایت
Sep 28, 2005
2,052
نوشته شده توسط alprh:
از اونجایی که ساخت بازی ها احتیاج به یادگیری زبان های low level ونزدیک به زبان ماشین داره این تایپیک رو راه اندازی کردم تا دوستانی که با این زبان آشنایی دارن مقالاتی برای آشنایی و یادگیری دیگران بگذارن . امیده که بقیه دوستان و همچنین خودم آشنایی بیشتری به این زبان پیدا کنیم و در راه ساخت یه بازی موفق کاملا ایرانی به کار بگیریم.
اتفاقا علی جان ساخت بازی ها اصلا نیاز به دانستن زبانهای سطح پایین نداره
اتفاقا برعکس بیشتر بازی های کنونی تحت ++C ساخته میشه و از انجین های از پیش آماده استفاده
البته در بعضی مواقع برنامه نویسا میرن سراغ برنامه نویسی مستقیم تحت DirectX یا OpenGL
 

Hellgate:london

کاربر ویژه
Loyal Member
Sep 26, 2005
2,527
نام
محمدرضا . م
سلام
راست میگه.
یه تریلر من از تیم Id دارم.
این یکی از محبوبترین تریلر های منه.
جان کارمک(همون عکس منه یا اواتار به قول شما)
اون داره با ++C مینویسه.
خط 4283.
کسی می دونه بازی دوم 3 چند خط کد نویسی داشته؟؟؟؟
کسی اگه خبری در مورد تعداد خط برای این بازی و اینجین بازی داره بگه.
چون من خیلی دوست دارم بدونم معتبرین موتور گرافیکی از نظر گرافیک چند خط طول کشیده ؟؟؟؟


بای بای
 

pandora tomorrow

True Blue
مدیر انجمن
Sep 23, 2005
42,601
نام
امین
این یکی از محبوبترین تریلر های منه.
اگه لینکش روداری بزار ببینیم این محبوب ترینت چیه
 

alprh

کاربر سایت
Sep 28, 2005
940
نام
Alprh The Drawranger
من داشتم تا یه مدت پیش اسمبلی کار میکردم . به نظر من هرچی زبان به زبان ماشی نزدیک تر باشه درسته که کار طولانی تر میشه ولی انعتاف و نتیجه کار بهتر میشه .
 

Saman

Administrator
Sep 22, 2005
1,137
بازي هاي کنونی تحت ++c ساخته میشه


اقا من ترم يك نرم افزار هستم.هيچي هم از برنامه نويسي نميدونم.استاد ما هم درس مباني برنامه نويسي رو با سي ++ شروع كرده.كه گويا نبايد ميكرده.درسته سي خيلي قويه اما قبلش بايد يه چيزايي رو ياد گرفت.

الان من باقاليه باقاليه م ! هيچي از حرفاش نميفهمم.زبان سختيه.البته هنوز كتاب نداريم.چون كتابمون نايابه.واستاد جلسه بعد برامون مياره.اونو بخونم ببينم چي به چيه ...



الان دارم يه برنامه مينويسم كه براتون توضيح خواهم داد.اگه تونستيد بهم كمك كنيد.هر كي سي ++ بلده يه ندا بده ...
 
آخرین ویرایش:

NIK

کاربر سایت
Sep 23, 2005
262
نام
امیر
سلام دوستان، مثل اینکه بعضی از شما فقط اسم برنامه نویسی رو شنیدین. خدمت آقای alprh هم عرض کنم که #C نه تنها low-level نیست بلکه کاملا hi-level است. تازه هم من تا حالا نشنیدم کسی بیاد با Assembly بازی بنویس.الان دیگه کار خیلی راحت شده هر کی که با NET. کار میکنه می تونه بره SDK DirectX رو دانلود کنه و تو محیطNET. برنامه خودشو بنویسه.
در ضمن saman جان هر سوالی داشتی من خوشحال میشم کمکت کنم.
 

Hellgate:london

کاربر ویژه
Loyal Member
Sep 26, 2005
2,527
نام
محمدرضا . م
سلام
به دوستان خوبم.
اگه کسی هم توی Net. مشکلی داشت اگه بتونم در خدمتیم.
اگه دوستان بخوان اموزش Net. رو میتونیم شروع کنیم.
فکر کنم هم برا من خوبه چون یاداوری میشه و هم برا باقی دوستان.
خوشحال میشم کمک کنم.
به نظر توی این همه برنامه که جوونیام باهاش کار میکردم.هیچ برنامه به قدرت Net. نیست.
انقدر این برنامه از نظر راحتی از نظر User friendly بودن راحته که من به شخصه داشتم شاخ در می یاوردم.
باید در این مورد به ماکروسافت برای این برنامه تبریک گفت.
که الانم نسخه 2005 اون اومده(البته نسخه فاینالش نیست) الان همون 2003 ش هست که باهاش کار میکنن.
برا این کار باید مدیران بگن.تا اموزششو شروع کنم.


بای بای
 

Saman

Administrator
Sep 22, 2005
1,137
بچه ها ممنون از اينكه به من كمك ميكنيد...

به نظر من آوزش رو كه نميشه اينجا انجام داد.يعني از حوصله خارجه و جاش اينجا نيست.من ميگم اينجا جايي بشه براي رفع اشكال و راهنمايي برنامه نويس ها.يا كمك كنيم به برنامه نويس ها براي انجام مثلا يه پروژه...

حالا من اولين سوال رو ميپرسم:

من ميخوام وقتي Prompt باز ميشه و برنامه من اجرا ميشه،تو يه جاي خاص روي صفحه نوشته شه : "لطفا براي ادامه كليد A را فشار دهيد" خب اين نوشته رو ميشه با دستور Cout رو صفحه نوشت.و ميشه يه دستور Getchar هم نوشت.اما من تا همين جا بلدم.با اين دستور من ، هر دكمه اي كه روي كيبور فشار بدي برنامه ادامه پيدا ميكنه.اما من ميخوام فقط يه دكمه ي خاص باشه.چي كار بايد بكنم ؟( در محيط C++ هستيم)
 

farzadlion

کاربر سایت
Sep 30, 2005
2,175
کسی می دونه بازی دوم 3 چند خط کد نویسی داشته؟؟؟؟
توی Manual بازیه دووم نوشته بود اما الان درست یادم نیست (فکر کنم چیزی در حدود 50000 خط بود )

تازه هم من تا حالا نشنیدم کسی بیاد با Assembly بازی بنویس
اخه اگه کسی بخواد با Assembly برنامه و یا بازی بنویسه که پدرش در میاد..خداییش خیلی سخت و وقت گیره

اقا من ترم يك نرم افزار هستم.هيچي هم از برنامه نويسي نميدونم.استاد ما هم درس مباني برنامه نويسي رو با سي ++ شروع كرده.كه گويا نبايد ميكرده.درسته سي خيلي قويه اما قبلش بايد يه چيزايي رو ياد گرفت.
آره اما مثل ما نباشند که استاد جلسه اول اومد و Torbo Pascal درس داد..واقعا خنده داره در سال 2005 هنوز دارن توی ایران زبانای از رده خارج شده مثل Torbo Pascal درس میدند
 

NIK

کاربر سایت
Sep 23, 2005
262
نام
امیر

این هم همون برنامه که می خواستی :)
 

NIK

کاربر سایت
Sep 23, 2005
262
نام
امیر
با سلام مجدد، saman جان ببخشید اون خطی رو که نوشتم () inputchar = getch باید به cin >> inputchar اصلاح کنی من حواسم نبود که همش باید ++C باشه. این مسئله بعدا یادم افتاد :neutral:
در ضمن من به #C و ASP.NET مسلتم هر کی بحثی، سوالی،موضوع جدیدی، ... تو این زمینه ها داره تو این تاپیک بگه تا ما هم استفاده کنیم.
 

Saman

Administrator
Sep 22, 2005
1,137
NIK (اسمت رو هم به ما بگو) دستت درد نكنه.

من با دستور Clrscr آشنا نيستم ! فكر كنم يه مقدار زود باشه كه بخوام اين برنامه رو بنويسيم.ديگه ترم يكيم هيچي بلد نيستيم.حالا بايد برنامه رو بررسي كنم تا ببينم چي به چيه.

من الان تو درك حلقه ها مشكل دارم ! كتاب رو كه بگيرم يه مقدار بيشتر تمرين ميكنم.

اهان Switch رو هم درك نكردم !

كلا باقاليه هستم.اصلا نميتونم برنامه بنويسم !

راستي دستوري مثه :

Cin>>A مفهومش چيه ؟ يعني از كيبور وارد A كن ؟ اين يعني چي ؟
 
آخرین ویرایش:

NIK

کاربر سایت
Sep 23, 2005
262
نام
امیر
نوشته شده توسط Saman:
NIK (اسمت رو هم به ما بگو) دستت درد نكنه.

من با دستور Clrscr آشنا نيستم ! فكر كنم يه مقدار زود باشه كه بخوام اين برنامه رو بنويسيم.ديگه ترم يكيم هيچي بلد نيستيم.حالا بايد برنامه رو بررسي كنم تا ببينم چي به چيه.

من الان تو درك حلقه ها مشكل دارم ! كتاب رو كه بگيرم يه مقدار بيشتر تمرين ميكنم.

اهان Switch رو هم درك نكردم !

كلا باقاليه هستم.اصلا نميتونم برنامه بنويسم !

راستي دستوري مثه :

Cin>>A مفهومش چيه ؟ يعني از كيبور وارد A كن ؟ اين يعني چي ؟
سلام دوباره سامان جان :lol:
كلا باقاليه هستم.اصلا نميتونم برنامه بنويسم !
بابا سامان جان عزیز انقدر خودتو دست کم نگیر :surprised کم کم راه می افتی.
حالا می خوام تمام کد رو برات توضیح بدم (خط به خط):
فعلا راجع به include چیزی نمی گم تا گیج نشی فقط بدون که کد تابع های از پیش تعریف شده مثل clrscr, gotoxy, ......... اونجاست.
حالا ()clrscr: این تابع مخفف عبارت Clear Screen می باشد و برای پاک کردن نتیجه صفحات قبلی به کار می رود. اگه خواستی این رو پاک کن و برنامه رو دو سه بار اجرا کن تا نتیجه رو خودت بفهمی.
char inputchar: هم که خیلی ساده است، فقط داریم یه متغیر از نوع char تعریف می کنیم.
(gotoxy(10,10:اگه کد اجرا کرده باشی می بینی که عبارت press <A> key... e در بالا سمت چپ چاپ نشده و در مختصات 10و10 چاپ شده. یعنی کار این تابع بردن مکان نما به مختصات مورد نظر است.
"cout << "Press... continue: در اینجا cout از نظر لغوی فکر اگه درست یادم بیاد به معنای Console Out می باشد و برای چاپ کردن عبارت سمت راست در خروجی است.
حالا می رسیم به while: ببین سامان جان حلقه ی while اینجوری کار می کنه که وقتی برنامه به اون خط می رسه ابتدا شرط رو چک می کنه، اگر درست بود می ره داخل while رو اجرا میکنه وگرنه می ره بعد از کروشه بسته ی حلقه (منظورم { است). ببین تو اکثر زبان ها 1 معادل true(درست) و 0 معادل false(غلط) است. من هم چون می خواستم حتما بره تو while شرط رو 1 یعنی درست گذاشتم. (حالا بریم تو حلقه)
cin >> inputchar: در اینجا (cin = console in) یعنی هر وقت برنامه به اینجا صبر می کنه تا کاربر یک کلید را در کیبرد بزند (بعد از آن باید Enter رو زد) بعد مقدار آن کلید یا کد اسکی(ASCII) در inputchar ریخته می شه.(اون خطی که من نوشته بودم دیگه Enter رو نمی خواد)
با اجازه من یه کم کار دارم بقیه رو هم طی امشب یا فردا شب برات می گم.
فقط برام بگو با کدوم برنامه کار می کنی:borland ++C یا ++turbo C یا ......
اگه می خوای خوب متوجه بشی لااقل یک بار هم که شده باید این رو اجرا کنی
 

alprh

کاربر سایت
Sep 28, 2005
940
نام
Alprh The Drawranger
دوستان من یه سری مقالات آموزش cشارپ پیدا کردم که از این به بعد روزی یه درس از اونو توی سایت میذارم . اگه کسی مجموعه کامل این مقالات رو میخواست میتونه یه پیام بده که بهش بدم.
برگرفته از سایت
www.dev.ir
طي سلسله مقالاتي مي خواهيم با C# بيشتر آشنا شويم. فرض اين مقالات بر اين است كه آشنايي مختصري با زبانهاي برنامه نويسي داريد ، هر چند كار ما تقريبا از صفر شروع مي شود و هدف آن سادگي هر چه بيشتر است.

C# از دو زبان C++ و Java متولد شده است! حاوي بسياري از جنبه هاي C++ مي باشد اما ويژگي هاي شيء گرايي خودش را از جاوا به ارث برده است.

C# اگرچه از C++ گرفته شده است اما يك زبان "خالص" شيء گرا (Object oriented) مي باشد. هر دو زبان ياد شده جزو زبانهاي هيبريد محسوب مي شوند اما طراحان C# اين مورد را به اندازه ي C++ مهم تلقي نكرده اند. يك زبان هيبريد اجازه ي برنامه نويسي با شيوه هاي مختلف را ميسر مي كند. دليل اينكه C++ هيبريد است ، اين است كه قرار بوده تا با زبان C سازگار باشد و همين امر سبب گرديده تا بعضي از جنبه هاي C++ بسيار پيچيده شوند.

زبان سي شارپ فرض اش بر اين است كه شما مي خواهيد تنها برنامه نويسي شيء گرا انجام دهيد و همانند C++ مخلوطي از برنامه نويسي رويه ايي (Procedural) و شيء گرا را نمي خواهيد به پايان برسانيد. بنابراين بايد طرز فكر خودتان را با دنياي شيء گرايي تطبيق دهيد. در ادامه خواهيد ديد كه در سي شارپ هر چيزي شيء است حتي يك برنامه ي سي شارپ.

برنامه ي اول :

Visual studio.net را اجرا كنيد و سپس در صفحه ي ظاهر شده New Project را برگزينيد. حالا از گزينه ي Visual C# projects قسمت Console applications را انتخاب نماييد. نامي دلخواه همانند ex01 را وارد نموده و سپس Ok نماييد. كد زير به صورت خودكار براي شما توليد خواهد شد:



using System;

namespace ex01
{
///
/// Summary description for Class1.
///
class Class1
{
///
/// The main entry point for the application.
///
[STAThread]
static void Main(string[] args)
{
//
// TODO: Add code to start application here
//
}
}
}


اگر يك سري از مفاهيم آنرا متوجه نمي شويد اصلا مهم نيست! در مقالات آتي تمام اين موارد مفصل توضيح داده خواهند شد.
متد استاندارد Main در اينجا قسمتي است كه عمليات اصلي برنامه در حالت Console ( شبيه به برنامه هاي تحت داس اما 32 بيتي ) در آن انجام مي شود.
بدون متد Main برنامه هاي سي شارپ قادر به اجرا نخواهند بود. نوع آن در اينجا void تعريف شده است يعني اين متد خروجي ندارد. حتي اگر برنامه هاي استاندارد ويندوز را هم بخواهيد با C# بنويسيد بازهم متد Main حضور خواهد داشت ، هر چند به صورت خودكار ويژوال استوديو آنرا توليد مي كند.

طريقه ي نوشتن توضيحات (Comments) در سي شارپ همانند C++ مي باشد يعني :



/* any comments */


ويا


// any comments


و تنها برنامه نويس براي نوشتن توضيحاتي در مورد كدهاي خود از آنها استفاده مي كند و در خروجي برنامه ظاهر نمي شوند.

فعلا براي پايان قسمت اول از شيء Console و متد WriteLine آن براي نمايش يك جمله ي ساده استفاده مي كنيم. راجع به متدها ، متغيرها و غيره در آينده بيشتر صحبت مي كنيم.
در آخر برنامه ي ما چيزي شبيه به عبارت زير مي باشد:



using System;

namespace ex01
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
Console.WriteLine("Hello C#!");
}
}
}


دكمه ي F5 را فشار دهيد تا برنامه اجرا شود.

تعريف متغيرها در سي شارپ:

سي شارپ عناصري را كه بكار مي گيرد همانند اعداد و كاراكترها ، به صورت نوع ها (Types) طبقه بندي مي كند. اين انواع شامل موارد زير مي شوند :
نوع هاي پايه ايي از پيش تعريف شده مانند اعداد و غيره.
نوع هاي تعريف شده توسط كاربر كه شامل STRUCT ها و ENUM ها مي شوند.

نحوه ي تعريف متغيرها از نوع هاي پايه ايي از پيش تعريف شده :
همانطور كه مي دانيد از متغيرها براي نگهداري اطلاعات استفاده مي شود. در سي شارپ ابتدا نوع متغير و سپس نام متغير و در آخر يك سمي كولون بكار برده مي شود. براي مثال :


int a;


كه در اينجا متغير a بعنوان يك متغير حاوي اعداد صحيح تعريف شده است.
نكته ي مهمي كه در اينجا حائز اهميت است ، مقدار دهي اوليه ي متغيرها مي باشد. در غير اينصورت كامپايلر سي شارپ برنامه را بايك خطا متوقف مي كند. دليل اين امر هم اين است كه از استفاده از متغيرهاي بدون مقدار در طول برنامه جلوگيري شود تا ميزان خطاهاي در حين اجرا كاهش يابد.

نوع هاي داده اي پايه ي زير در در سي شارپ به صورت پيش فرض مهيا هستند:

object : نوعي است نامحدود كه مي تواند تمام انواع ديگر را نيز شامل شود. مثال :


object = null;


string : رشته ؛ در اينجا يك رشته توالي كاراكترهاي يونيكد مي باشد. مثال :


string s= "hello";


sbyte : نوع داده ايي صحيح 8 بيتي علامت دار.
byte : نوع داده ايي صحيح 8 بيتي بدون علامت. مثال :


sbyte val = 12;


short : نوع داده ايي صحيح 16 بيتي علامت دار.
ushort : نوع داده ايي صحيح 16 بيتي بدون علامت. مثال :


short val = 12;


int : نوع داده ايي صحيح 32 بيتي علامت دار.
unit : نوع داده ايي صحيح 32 بيتي بدون علامت. مثال :


int val = 12;


long : نوع داده ايي صحيح 64 بيتي علامت دار.
ulong : نوع داده ايي صحيح 64 بيتي بدون علامت. مثال :


Long val1 = 12; long val2 = 34L;


كلا در اينجا u به معناي unsigned است.

float : نوع اعشاري با single precision .
double : نوع اعشاري با double precision . مثال :


float val = 1.23f;


bool : نوع داده ايي Boolean كه مي تواند true و يا false باشد. مثال :


Bool val = true;


char : كاراكتر، دراينجا char يك كاراكتر يونيكد است.


char val = 'h';


به نحوه ي تعريف كاراكتر ها و همچنين رشته ها در سي شارپ دقت كنيد.

decimal : نوع داده ايي دسيمال با 28 رقم معني دار.


decimal val = 1.23M;


يك نكته :

- بهتر است هنگام تعريف يك متغير ، نامي با مسما براي آن انتخاب شود تا در هنگام كار خواندن كد ساده تر گردد. همچنين رسم شده است كه نوع متغير را به صورت خلاصه به نام متغير اضافه مي كنند. براي مثال بجاي FirstName بهتر است بنويسيم strFirstName . به اين نوع نگارش Hungarian notation مي گويند.
- تمام نوع هاي پيش فرض تعريف شده در سي شارپ شيء هستند. در آينده بيشتر در اين مورد صحبت خواهيم كرد.

مثال اين قسمت :

يك برنامه ي console جديد در را VS.NET باز كنيد. نام آنرا در ابتدا ex02 انتخاب نماييد. در اينجا مي خواهيم دو متغير رشته ايي و صحيح را تعريف و سپس در خروجي نمايش دهيم.

كد نهايي به صورت زير مي باشد:


using System;

namespace ex02
{
///
/// Summary description for Class1.
///
class Class1
{
///
/// The main entry point for the application.
///
[STAThread]
static void Main(string[] args)
{
int intVar1 = 0;

int intVar2;
intVar2=1;

int intV3=15 , intV4 = 12;

string strText1 = "abcd";

Console.WriteLine(
"The value for variables are : \n intVar1="+intVar1 +
"\n intVar2="+ intVar2 +
"\n intV3=" + intV3 +
"\n intV4=" + intV4 +
"\n strText1=" + strText1);

Console.WriteLine("\n\n Press any key to terminate");
Console.ReadLine(); // pause screen!

}
}
}


نكاتي در مورد كد فوق:

- بك اسلش ان ، در زبانهاي مشتق شده از سي به معناي new line مي باشد.
- در كد فوق نحوه ي تعريف چند متغير در يك خط و حالتهاي مقدار دهي مختلف را ملاحظه مي كنيد.
- از متد ReadLine براي نگه داشتن خروجي و مشاهده ي آن در اينجا استفاده كرديم.
- عادت كنيد به صورت دندانه دار كد بنويسيد. اينكار خوانايي كد را صد برابر مي كند. در اينجا كدهاي داخل متد main ، كاملا چند دندانه از آكولادهاي باز و بسته كردن آن جلو تر هستند.
- در كد بالا در متد WriteLine اعداد و رشته ها با هم جمع شده اند! اين مورد بدليل وجود overload هاي زياد اين تابع و ... ميسر گشته است. اصلا به آن دل نبنديد! چون در آينده كامپايلر سي شارپ اگر چنين اعمالي را در جاهاي ديگري مرتكب شويد به شدت با شما برخورد خواهد كرد!! براي جمع كردن اعداد با رشته ها حتما بايد عدد به رشته تبديل گردد و بعد ... . در اين مورد در مقالات بعدي بحث خواهد گرديد.
 

کاربرانی که این گفتگو را مشاهده می‌کنند (کاربران: 0, مهمان: 1)

Top
رمز عبور خود را فراموش کرده اید؟