كيفية إنشاء لعبة نصية أساسية في C++

Kyfyt Ansha L Bt Nsyt Asasyt Fy C



تعتمد الألعاب النصية على الأحرف النصية وواجهة سطر الأوامر للتفاعل مع اللاعب. ليس لديهم صور رسومية أو أصوات أو رسوم متحركة. يقوم المستخدم بإدخال الأمر من خلال نافذة وحدة التحكم.

كيفية إنشاء لعبة نصية أساسية في C++

تسمح الألعاب النصية في لغة C++ للاعب بإدخال الأوامر من خلال نافذة وحدة التحكم، ويقوم البرنامج بمعالجة تحركات اللاعب. لقد قمت هنا بإنشاء لعبة tic-tac-toe مبنية على النص وتتيح خيارين للمستخدم للعب. يمكن للمستخدم إما اللعب مع مترجم C++ أو مع إنسان آخر. تحتوي هذه اللعبة على ميزة تستمر في إضافة النتيجة للاعب الفائز. بعد إعلان نتيجة المباراة الأولى، يتوفر خيار إعادة المباراة.

قواعد الفوز باللعبة

يلعب لاعبان لعبة تيك تاك تو، حيث يضعان X و0 بالتناوب في إحدى المساحات التسعة المتاحة على شبكة ثلاثية في ثلاثة. يفوز باللعبة أول لاعب يحصل على ثلاث من علاماته المتتالية في الاتجاه الرأسي أو الأفقي أو القطري. يجب على كل لاعب أن يفكر بذكاء ويتطلع إلى الخطوة التالية للاعب الآخر.







يحتوي الكود الخاص بتصميم لعبة tic-tac-toe المبنية على النص على أقسام مختلفة، مقسمة على أساس الوظيفة. في القسم الأول، يقرر المستخدم ما إذا كان سيلعب مع جهاز كمبيوتر أو مع إنسان آخر. بعد تحديد طريقة الكسب، يطلب البرنامج من المستخدم الإدخال. يقوم كلا اللاعبين بإدخال المدخلات واحدًا تلو الآخر.



// خذ المدخلات من اللاعبين
فارغ playerInput ( لاعب & لاعب ) {
كثافة العمليات نقاط البيع ;
cout << endl ;
cout << ' \ ر ' << لاعب. getName ( ) << ' دور: ' ;
cout << ' \ ر أدخل الموقف ' <> نقاط البيع ;
نقاط البيع - = 1 ;
لو ( فارغةIndex [ نقاط البيع ] == 1 ) {
cout << '-----المنصب ليس فارغًا-------' << endl ;
playerInput ( لاعب ) ;
} آخر {
فارغةIndex [ نقاط البيع ] = 1 ;
فارغة - = 1 ;
لاعب. getName ( ) . يقارن ( 'اللاعب أنا' ) == 0 ؟ سبورة [ نقاط البيع ] = 'X' : سبورة [ نقاط البيع ] = 'يا' ;
}

}

بعد أخذ المدخلات من المستخدم، فإنه يتحقق من قاعدة الفوز. تحتوي وظيفة checkWin() على معلمتين p1 وp2 للتحقق مما إذا كان اللاعب قد فاز أم لا. تم الإعلان عن متغيرات مختلفة في الدالة i وj وk وهي متغيرات عددية معلنة للحلقة والعلامة هي دالة منطقية للتحقق من حالة الفوز. تبدأ الحلقة من الموضع الأول وتستمر في التكرار لجميع المواضع التسعة. الرمز_الأول هو حرف يمكن أن يكون 0 أو X إذا كان صحيحًا، فسيتم التحقق من جميع المجموعات الممكنة بحثًا عن القاعدة الفائزة. وبخلاف ذلك، ينتقل المكرِّر إلى الموضع التالي، ويستمر الأمر نفسه حتى يتم التحقق من جميع المواضع المحتملة. إذا تم تعيين العلم ليكون صحيحًا، فسيتم الإعلان عن الفائز، ويطلب البرنامج إجراء الاختيار مرة أخرى.



فارغ com.checkWin ( لاعب & ص1، لاعب & p2 ) {
كثافة العمليات ط، ي، ك ;
منطقي علَم = خطأ شنيع ;
شار first_symbol ;
ل ( أنا = 0 ; أنا < 8 ; أنا ++ ) {
first_symbol = سبورة [ com.winlist [ أنا ] . صف [ 0 ] ] ;

لو ( ( first_symbol ! = 'X' ) && ( first_symbol ! = 'يا' ) ) {
علَم = خطأ شنيع ;
يكمل ;
}
علَم = حقيقي ;
ل ( ي = 0 ; ي < 3 ; ي ++ ) {
لو ( first_symbol ! = سبورة [ com.winlist [ أنا ] . صف [ ي ] ] ) {
علَم = خطأ شنيع ;
استراحة ;
}
}
لو ( علَم ) {
gameOn = 0 ;
لو ( first_symbol == 'X' ) {
cout << '------------------------' << endl ;
cout << ' \ ر اللاعب الذي فزت به' << endl ;
cout << '------------------------' << endl ;
ص1. فاز ( ) ;
} آخر {
                    p2. فاز ( ) ;
لو ( ضد الكمبيوتر ) {
cout << '------------------------' << endl ;
cout << ' \ ر فاز الكمبيوتر' << endl ;
cout << '------------------------' << endl ;
} آخر {
cout << '------------------------' << endl ;
cout << ' \ ر فاز اللاعب الثاني' << endl ;
cout << '------------------------' << endl ;

}
}
this.displayScore ( ص1، ص2 ) ;
استراحة ;
}

يوضح هذا الجزء من الكود نتيجة اللعبة. إذا كانت المباراة ضد جهاز كمبيوتر، فسيتم عرض نتيجة اللاعب 1 والكمبيوتر، وإلا فسيتم عرض نتيجة اللاعب 1 واللاعب 2.





فارغ this.displayScore ( لاعب & ص1، اللاعب & p2 ) {
cout << endl ;
cout << ' \ ر نتيجة: \ ر ' ;
لو ( ضد الكمبيوتر )
cout << 'اللاعب الأول:' << ص1. com.getScore ( ) << ' \ ر حاسوب: ' << p2. com.getScore ( ) << endl ;
آخر
cout << 'اللاعب الأول:' << ص1. com.getScore ( ) << ' \ ر اللاعب الثاني:' << p2. com.getScore ( ) << endl ;
}

هذا هو الكود الرئيسي لتنفيذ لعبة tic-tac-toe للاعبين. يمكن للمستخدم الاختيار من بين مجموعة متنوعة من الإجراءات التي سيتم تنفيذها باستخدام بيان حالة التبديل. يوفر هذا الكود واجهة سهلة الاستخدام للعب لعبة على مترجم C++، ويستمر تنفيذ الكود حتى يحدد المستخدم خيار الخروج.

كثافة العمليات رئيسي ( )
{
كثافة العمليات الفصل ;

بينما ( 1 ) {
cout << ' ----------قائمة طعام----------' << endl ;
cout << ' \ ر 1. لعبة لاعب واحد' << endl ;
cout << ' \ ر 2. لعبة لاعبين' << endl ;
cout << ' \ ر 3. للخروج ' << endl ;
cout << '       ----------' << endl ;
cout << endl ;
cout << ' \ ر حدد اختيارا' <> الفصل ;
يُحوّل ( الفصل ) {
قضية 1 : {
لعبة * لعبة = جديد لعبة ;
لعبة - > حرارة ( ) ;
لعبة - > com.onePlayerGame ( ) ;
}
استراحة ;
قضية 2 : {
لعبة * لعبة = جديد لعبة ;
لعبة - > حرارة ( ) ;
لعبة - > com.twoPlayerGame ( ) ;
}
استراحة ;
قضية 3 :
يعود 0 ;
تقصير :
cout << 'عذرًا، الخيار غير صالح! حاول مرة أخرى' ;
}

}
يعود 0 ;
}

الكود الكامل للعبة Tic-Tac-Toc المبنية على النص

هذا رمز كامل لتصميم وتنفيذ لعبة تيك تاك تو المبنية على النص.



#تشمل
#تشمل<قائمة>
#تشمل
#تشمل<سلسلة>
#تشمل
استخدام مساحة الاسم الأمراض المنقولة جنسيا ;

typedef البنية {
كثافة العمليات * صف ;
} WinList ;


فصل لاعب {
خاص :
اسم السلسلة ;
كثافة العمليات نتيجة ;
عام :
لاعب ( ) : لاعب { '' } { }
لاعب ( سلسلة ن ) : نتيجة { 0 } ، اسم { ن } { }

فارغ فاز ( ) {
// زيادة النتيجة
نتيجة ++ ;
}
كثافة العمليات com.getScore ( ) { يعود هذا - > نتيجة ; }

سلسلة getName ( ) { يعود هذا - > اسم ; }
} ;

فصل لعبة {
خاص :
شار سبورة [ 9 ] ;
كثافة العمليات فارغةIndex [ 9 ] ;
كثافة العمليات gameOn، ضد الكمبيوتر ;
كثافة العمليات فارغة ;
WinList Winlist [ 8 ] ;

فارغ لوحة العرض ( ) {
cout << endl ;
cout << '   |   |   ' << endl ;
cout << ' ' << سبورة [ 0 ] << ' | ' << سبورة [ 1 ] << ' | ' << سبورة [ 2 ] << endl ;
cout << '   |   |   ' << endl ;
cout << '----------' << endl ;
cout << '   |   |   ' << endl ;
cout << ' ' << سبورة [ 3 ] << ' | ' << سبورة [ 4 ] << ' | ' << سبورة [ 5 ] << endl ;
cout << '   |   |   ' << endl ;
cout << '----------' << endl ;
cout << '   |   |   ' << endl ;
cout << ' ' << سبورة [ 6 ] << ' | ' << سبورة [ 7 ] << ' | ' << سبورة [ 8 ] << endl ;
cout << '   |   |   ' << endl ;
cout << endl ;
}

فارغ ComputerInput ( ) {
كثافة العمليات نقاط البيع ;
نقاط البيع = راند ( ) % 10 ;
لو ( فارغةIndex [ نقاط البيع ] == 1 ) {
لو ( فارغة < 0 )
يعود ;
ComputerInput ( ) ;
} آخر {
cout << 'اختيار الكمبيوتر:' << نقاط البيع + 1 << endl ;
فارغةIndex [ نقاط البيع ] = 1 ;
فارغة - = 1 ;
سبورة [ نقاط البيع ] = 'يا' ;
}

}

فارغ playerInput ( لاعب & لاعب ) {
كثافة العمليات نقاط البيع ;
cout << endl ;
cout << ' \ ر ' << لاعب. getName ( ) << ' دور: ' ;
cout << ' \ ر أدخل الموقف ' <> نقاط البيع ;
نقاط البيع - = 1 ;
لو ( فارغةIndex [ نقاط البيع ] == 1 ) {
cout << '-----المنصب ليس فارغًا-------' << endl ;
playerInput ( لاعب ) ;
} آخر {
فارغةIndex [ نقاط البيع ] = 1 ;
فارغة - = 1 ;
لاعب. getName ( ) . يقارن ( 'اللاعب أنا' ) == 0 ؟ سبورة [ نقاط البيع ] = 'X' : سبورة [ نقاط البيع ] = 'يا' ;
}

}

فارغ com.checkWin ( لاعب & ص1، لاعب & p2 ) {
كثافة العمليات ط، ي، ك ;
منطقي علَم = خطأ شنيع ;
شار first_symbol ;
ل ( أنا = 0 ; أنا < 8 ; أنا ++ ) {
first_symbol = سبورة [ com.winlist [ أنا ] . صف [ 0 ] ] ;

لو ( ( first_symbol ! = 'X' ) && ( first_symbol ! = 'يا' ) ) {
علَم = خطأ شنيع ;
يكمل ;
}
علَم = حقيقي ;
ل ( ي = 0 ; ي < 3 ; ي ++ ) {
لو ( first_symbol ! = سبورة [ com.winlist [ أنا ] . صف [ ي ] ] ) {
علَم = خطأ شنيع ;
استراحة ;
}
}
لو ( علَم ) {
gameOn = 0 ;
لو ( first_symbol == 'X' ) {
cout << '------------------------' << endl ;
cout << ' \ ر اللاعب الذي فزت به' << endl ;
cout << '------------------------' << endl ;
ص1. فاز ( ) ;
} آخر {
                    p2. فاز ( ) ;
لو ( ضد الكمبيوتر ) {
cout << '------------------------' << endl ;
cout << ' \ ر فاز الكمبيوتر' << endl ;
cout << '------------------------' << endl ;
} آخر {
cout << '------------------------' << endl ;
cout << ' \ ر فاز اللاعب الثاني' << endl ;
cout << '------------------------' < 0 ) && ( gameOn ! = 0 ) ) {

لو ( ضد الكمبيوتر )
يُسلِّم == 1 ؟ ComputerInput ( ) : playerInput ( p2 ) ;
آخر
يُسلِّم == 1 ؟ playerInput ( ص1 ) : playerInput ( p2 ) ;
يُسلِّم = ! يُسلِّم ;
لوحة العرض ( ) ;
com.checkWin ( ص1، ص2 ) ;
}
لو ( فارغة <= 0 ) {
cout << '      -----------------------' << endl ;
cout << ' \ ر لا يوجد فائز' << endl ;
cout << '      -----------------------' << endl ;
}
cout << endl ;
cout <> مباراة العودة ;
لو ( ( مباراة العودة == 'و' ) || ( مباراة العودة == 'و' ) ) {
حرارة ( ) ;
يلعب ( ص1، ص2 ) ;
}

}
فارغ this.displayScore ( لاعب & ص1، اللاعب & p2 ) {
cout << endl ;
cout << ' \ ر نتيجة: \ ر ' ;
لو ( ضد الكمبيوتر )
cout << 'اللاعب الأول:' << ص1. com.getScore ( ) << ' \ ر حاسوب: ' << p2. com.getScore ( ) << endl ;
آخر
cout << 'اللاعب الأول:' << ص1. com.getScore ( ) << ' \ ر اللاعب الثاني:' << p2. com.getScore ( ) << endl ;
}

عام :
لعبة ( ) : فارغة { 0 } ، gameOn { 1 } ضد الكمبيوتر { 0 } {
حرارة ( ) ;
com.winlist [ 0 ] . صف = جديد كثافة العمليات [ 3 ] { 0 , 1 , 2 } ;
com.winlist [ 1 ] . صف = جديد كثافة العمليات [ 3 ] { 3 , 4 , 5 } ;
com.winlist [ 2 ] . صف = جديد كثافة العمليات [ 3 ] { 6 , 7 , 8 } ;
com.winlist [ 3 ] . صف = جديد كثافة العمليات [ 3 ] { 0 , 3 , 6 } ;
com.winlist [ 4 ] . صف = جديد كثافة العمليات [ 3 ] { 1 , 4 , 7 } ;
com.winlist [ 5 ] . صف = جديد كثافة العمليات [ 3 ] { 2 , 5 , 8 } ;
com.winlist [ 6 ] . صف = جديد كثافة العمليات [ 3 ] { 0 , 4 , 8 } ;
com.winlist [ 7 ] . صف = جديد كثافة العمليات [ 3 ] { 2 , 4 , 6 } ;
}

فارغ حرارة ( ) {
gameOn = 1 ;

فارغة = 0 ;
رند ( وقت ( 0 ) ) ;
ل ( size_t أنا = 0 ; أنا < 10 ; أنا ++ ) {
فارغةIndex [ أنا ] = 0 ;
سبورة [ أنا ] = ( أنا + 1 ) + '0' ;
فارغة ++ ;
}
فارغة -- ;
}

فارغ com.onePlayerGame ( ) {
// إنشاء المشغل
اللاعب ص ( 'اللاعب أنا' ) ;
اللاعب ج ( 'حاسوب' ) ;
cout << '       -----------------------' << endl ;
cout << ' \ ر اللاعب الأول: X \ ر الكمبيوتر: يا' << endl ;
cout << '       -----------------------' << endl ;
cout << endl ;
ضد الكمبيوتر = 1 ;
يلعب ( ج، ص ) ;

}

فارغ com.twoPlayerGame ( ) {
// إنشاء المشغل
اللاعب ص ( 'اللاعب أنا' ) ;
اللاعب ج ( 'اللاعب الثاني' ) ;
cout << '       -----------------------' << endl ;
cout << ' \ ر اللاعب الأول: X \ ر اللاعب الثاني: يا' << endl ;
cout << '       -----------------------' << endl ;
cout << endl ;
ضد الكمبيوتر = 0 ;
يلعب ( ج، ص ) ;
}
} ;

كثافة العمليات رئيسي ( )
{
كثافة العمليات الفصل ;

بينما ( 1 ) {
cout << ' ----------قائمة طعام----------' << endl ;
cout << ' \ ر 1. لعبة لاعب واحد' << endl ;
cout << ' \ ر 2. لعبة لاعبين' << endl ;
cout << ' \ ر 3. للخروج ' << endl ;
cout << '       ----------' << endl ;
cout << endl ;
cout << ' \ ر حدد اختيارا' <> الفصل ;
يُحوّل ( الفصل ) {
قضية 1 : {
لعبة * لعبة = جديد لعبة ;
لعبة - > حرارة ( ) ;
لعبة - > com.onePlayerGame ( ) ;
}
استراحة ;
قضية 2 : {
لعبة * لعبة = جديد لعبة ;
لعبة - > حرارة ( ) ;
لعبة - > com.twoPlayerGame ( ) ;
}
استراحة ;
قضية 3 :
يعود 0 ;
تقصير :
cout << 'عذرًا، الخيار غير صالح! حاول مرة أخرى' ;
}

}
يعود 0 ;
}

هذا هو الكود الكامل لتنفيذ لعبة tic-tac-toe، والتي يمكن لعبها في وضعين، إما مع جهاز كمبيوتر أو مع إنسان آخر. هذا رمز متعدد الاستخدامات، بما في ذلك جميع الأوامر الممكنة. عندما يقوم المستخدم بإدخال مركز ممتلئ بالفعل، فإنه لا يحل محل هذا المركز ويعتبر هذه الخطوة غير صالحة.

حتى الآن قام اللاعب الأول باختيار المربع الأول ثم في الدور التالي قام الكمبيوتر بوضع علامة على المربع السادس:

قام كلا اللاعبين باختيار المربعين حتى الآن وفي الجولة التالية اختار اللاعب المربع السابع مما أدى إلى إنشاء نمط عمودي متتالي:

يختار المستخدم استخدام الكمبيوتر للعب لعبة، لذلك بعد القيام بثلاث حركات، يفوز المستخدم من الكمبيوتر وتتم إضافة درجة واحدة إلى سجل اللاعب 1. بعد انتهاء المباراة الأولى، يطلب المترجم إعادة المباراة. يقرر المستخدم من بين الخيارات ويعود البرنامج إلى القسم الرئيسي. بعد اختيار الخيار الثالث، يقوم المترجم بتنفيذ التعليمات البرمجية.

خاتمة

تعتمد الألعاب النصية على الأحرف النصية وواجهة سطر الأوامر للتفاعل مع اللاعب. ليس لديهم صور رسومية أو أصوات أو رسوم متحركة. يقوم المستخدم بإدخال الأمر من خلال نافذة وحدة التحكم. تم تصميم لعبة tic-tac-toe سهلة الاستخدام والمبنية على النصوص باستخدام لغة C++. يستخدم أوامر مختلفة لإنشاء لعبة يمكن لعبها إما مع جهاز كمبيوتر أو مع لاعب زميل آخر.