כיצד ליצור משחק בסיסי מבוסס טקסט ב-C++

Kyzd Lyzwr Mshq Bsysy Mbwss Tqst B C



משחקים מבוססי טקסט מסתמכים על דמויות טקסט וממשק שורת פקודה לאינטראקציה עם השחקן. אין להם תמונות גרפיות, צלילים או אנימציות. המשתמש מזין את הפקודה דרך חלון המסוף.

כיצד ליצור משחק בסיסי מבוסס טקסט ב-C++

משחקים מבוססי טקסט ב-C++ מאפשרים לשחקן להזין פקודות דרך חלון קונסולה, והתוכנית מעבדת את המהלכים של הנגן. כאן, יצרתי משחק טיק-טאק-בוהן מבוסס טקסט המאפשר למשתמש לשחק שתי אפשרויות. המשתמש יכול לשחק עם המהדר C++ או עם בן אדם אחר. למשחק הזה יש תכונה שמוסיפה כל הזמן את הניקוד עבור השחקן המנצח. לאחר הכרזת תוצאת המשחק הראשון, קיימת אפשרות למשחק חוזר.

כללים לניצחון במשחק

שני שחקנים משחקים במשחק תקלות, וממקמים X ו-0 לחלופין באחד מתשע המקומות הזמינים ברשת של שלוש על שלוש. במשחק מנצח השחקן הראשון שישיג שלושה מהסימנים הרצופים שלו בכיוון אנכי, אופקי או אלכסוני. כל שחקן צריך לחשוב בצורה חכמה ולהסתכל קדימה למהלך הבא של השחקן השני.







לקוד לעיצוב משחק טיק-טאק-בוהן מבוסס טקסט יש חלקים שונים, המחולקים על בסיס פונקציונליות. בחלק הראשון, המשתמש מחליט אם לשחק עם מחשב או עם בן אדם. לאחר החלטה על אופן הרווח, התוכנית מבקשת מהמשתמש קלט. שני השחקנים נכנסים לקלט בזה אחר זה.



//קבל קלט משחקנים
בָּטֵל קלט שחקן ( שחקן & שחקן ) {
int pos ;
cout << endl ;
cout << ' \t ' << שחקן. getName ( ) << ' לפנות: ' ;
cout << ' \t הכנס לתפקיד' <> pos ;
pos - = 1 ;
אם ( ריקאינדקס [ pos ] == 1 ) {
cout << '-----העמדה לא ריקה-------' << endl ;
קלט שחקן ( שחקן ) ;
} אַחֵר {
ריקאינדקס [ pos ] = 1 ;
emptyCount - = 1 ;
שחקן. getName ( ) . לְהַשְׁווֹת ( 'שחקן אני' ) == 0 ? גלשן [ pos ] = 'איקס' : גלשן [ pos ] = 'או' ;
}

}

לאחר קבלת תשומות מהמשתמש, הוא בודק את כלל הניצחון. לפונקציה checkWin() יש שני פרמטרים p1 ו-p2 כדי לבדוק אם השחקן זכה או לא. משתנים שונים מוצהרים בפונקציה i, j ו-k הם משתנים שלמים המוצהרים עבור הלולאה והדגל הוא פונקציה בוליאנית לבדיקת תנאי הניצחון. הלולאה מתחילה מהמיקום הראשון וממשיכה לחזור על כל תשעת העמדות. ה-first_symbol הוא תו שיכול להיות 0 או X אם הוא נכון אז כל השילובים האפשריים נבדקים עבור הכלל המנצח. אחרת, האיטרטור עובר למיקום הבא, ואותו הדבר ממשיך עד שכל המיקומים האפשריים נבדקים. אם הדגל מוגדר להיות נכון, מכריז על הזוכה, והתוכנית מבקשת לבצע את הבחירה שוב.



בָּטֵל checkWin ( שחקן & p1, שחקן & p2 ) {
int אני, ג', ק ;
bool דֶגֶל = שֶׁקֶר ;
לְהַשְׁחִיר סמל_ראשון ;
ל ( אני = 0 ; אני < 8 ; אני ++ ) {
סמל_ראשון = גלשן [ winlist [ אני ] . שׁוּרָה [ 0 ] ] ;

אם ( ( סמל_ראשון ! = 'איקס' ) && ( סמל_ראשון ! = 'או' ) ) {
דֶגֶל = שֶׁקֶר ;
לְהַמשִׁיך ;
}
דֶגֶל = נָכוֹן ;
ל ( י = 0 ; י < 3 ; י ++ ) {
אם ( סמל_ראשון ! = גלשן [ winlist [ אני ] . שׁוּרָה [ י ] ] ) {
דֶגֶל = שֶׁקֶר ;
לשבור ;
}
}
אם ( דֶגֶל ) {
המשחק מתחיל = 0 ;
אם ( סמל_ראשון == 'איקס' ) {
cout << '------------------------' << endl ;
cout << ' \t שחקן שזכיתי' << endl ;
cout << '------------------------' << endl ;
p1. זכית ( ) ;
} אַחֵר {
p2. זכית ( ) ;
אם ( נגד מחשב ) {
cout << '------------------------' << endl ;
cout << ' \t המחשב זכה' << endl ;
cout << '------------------------' << endl ;
} אַחֵר {
cout << '------------------------' << endl ;
cout << ' \t שחקן השני ניצח' << endl ;
cout << '------------------------' << endl ;

}
}
displayScore ( p1,p2 ) ;
לשבור ;
}

חלק זה של הקוד מציג את הניקוד של המשחק. אם המשחק הוא נגד מחשב, הניקוד לשחקן 1 והמחשב מוצג, אחרת, הניקוד של שחקן 1 ושחקן 2 מוצג.





בָּטֵל displayScore ( שחקן & p1, שחקן & p2 ) {
cout << endl ;
cout << ' \t ציון: \t ' ;
אם ( נגד מחשב )
cout << 'שחקן I:' << p1. getScore ( ) << ' \t מחשב: ' << p2. getScore ( ) << endl ;
אַחֵר
cout << 'שחקן I:' << p1. getScore ( ) << ' \t שחקן שני: ' << p2. getScore ( ) << endl ;
}

זהו הקוד העיקרי לביצוע משחק טיק-טק-בוהן לשני שחקנים. המשתמש יכול לבחור מתוך מגוון הליכים שיבוצעו באמצעות הצהרת מקרה ה- switch. קוד זה מספק ממשק ידידותי למשתמש למשחק במהדר C++, והקוד ממשיך לפעול עד שהמשתמש בוחר באפשרות היציאה.

int רָאשִׁי ( )
{
int ch ;

בזמן ( 1 ) {
cout << '      ---------תפריט----------' << endl ;
cout << ' \t משחק 1. שחקן אחד' << endl ;
cout << ' \t 2. משחק 2 שחקנים' << endl ;
cout << ' \t 3. כדי לצאת ' << endl ;
cout << '      ---------' << endl ;
cout << endl ;
cout << ' \t בחר אפשרות' <> ch ;
החלף ( ch ) {
מקרה 1 : {
מִשְׂחָק * מִשְׂחָק = חָדָשׁ מִשְׂחָק ;
מִשְׂחָק - > חוֹם ( ) ;
מִשְׂחָק - > onePlayerGame ( ) ;
}
לשבור ;
מקרה 2 : {
מִשְׂחָק * מִשְׂחָק = חָדָשׁ מִשְׂחָק ;
מִשְׂחָק - > חוֹם ( ) ;
מִשְׂחָק - > twoPlayerGame ( ) ;
}
לשבור ;
מקרה 3 :
לַחֲזוֹר 0 ;
בְּרִירַת מֶחדָל :
cout << 'אופס אפשרות לא חוקית! נסה שוב' ;
}

}
לַחֲזוֹר 0 ;
}

קוד מלא למשחק טיק-טק-טוק מבוסס טקסט

זהו קוד שלם לעיצוב וביצוע של משחק טיק-טק מבוסס טקסט.



#include
#include<רשימה>
#include
#include
#include
באמצעות מרחב שמות סטד ;

typedef struct {
int * שׁוּרָה ;
} WinList ;


מעמד שחקן {
פְּרָטִי :
שם מחרוזת ;
int ציון ;
פּוּמְבֵּי :
שחקן ( ) : שחקן { '' } { }
שחקן ( מחרוזת נ ) : ציון { 0 } , שם { נ } { }

בָּטֵל זכית ( ) {
//הגדל את הניקוד
ציון ++ ;
}
int getScore ( ) { לַחֲזוֹר זֶה - > ציון ; }

מחרוזת getName ( ) { לַחֲזוֹר זֶה - > שֵׁם ; }
} ;

מעמד מִשְׂחָק {
פְּרָטִי :
לְהַשְׁחִיר גלשן [ 9 ] ;
int ריקאינדקס [ 9 ] ;
int gameOn, נגד מחשב ;
int emptyCount ;
WinList רשימת winlist [ 8 ] ;

בָּטֵל displayBoard ( ) {
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 ;
}

בָּטֵל קלט מחשב ( ) {
int pos ;
pos = ראנד ( ) % 10 ;
אם ( ריקאינדקס [ pos ] == 1 ) {
אם ( emptyCount < 0 )
לַחֲזוֹר ;
קלט מחשב ( ) ;
} אַחֵר {
cout << 'בחירת מחשב:' << pos + 1 << endl ;
ריקאינדקס [ pos ] = 1 ;
emptyCount - = 1 ;
גלשן [ pos ] = 'או' ;
}

}

בָּטֵל קלט שחקן ( שחקן & שחקן ) {
int pos ;
cout << endl ;
cout << ' \t ' << שחקן. getName ( ) << ' לפנות: ' ;
cout << ' \t הכנס לתפקיד' <> pos ;
pos - = 1 ;
אם ( ריקאינדקס [ pos ] == 1 ) {
cout << '-----העמדה לא ריקה-------' << endl ;
קלט שחקן ( שחקן ) ;
} אַחֵר {
ריקאינדקס [ pos ] = 1 ;
emptyCount - = 1 ;
שחקן. getName ( ) . לְהַשְׁווֹת ( 'שחקן אני' ) == 0 ? גלשן [ pos ] = 'איקס' : גלשן [ pos ] = 'או' ;
}

}

בָּטֵל checkWin ( שחקן & p1, שחקן & p2 ) {
int אני, ג', ק ;
bool דֶגֶל = שֶׁקֶר ;
לְהַשְׁחִיר סמל_ראשון ;
ל ( אני = 0 ; אני < 8 ; אני ++ ) {
סמל_ראשון = גלשן [ winlist [ אני ] . שׁוּרָה [ 0 ] ] ;

אם ( ( סמל_ראשון ! = 'איקס' ) && ( סמל_ראשון ! = 'או' ) ) {
דֶגֶל = שֶׁקֶר ;
לְהַמשִׁיך ;
}
דֶגֶל = נָכוֹן ;
ל ( י = 0 ; י < 3 ; י ++ ) {
אם ( סמל_ראשון ! = גלשן [ winlist [ אני ] . שׁוּרָה [ י ] ] ) {
דֶגֶל = שֶׁקֶר ;
לשבור ;
}
}
אם ( דֶגֶל ) {
המשחק מתחיל = 0 ;
אם ( סמל_ראשון == 'איקס' ) {
cout << '------------------------' << endl ;
cout << ' \t שחקן שזכיתי' << endl ;
cout << '------------------------' << endl ;
p1. זכית ( ) ;
} אַחֵר {
p2. זכית ( ) ;
אם ( נגד מחשב ) {
cout << '------------------------' << endl ;
cout << ' \t המחשב זכה' << endl ;
cout << '------------------------' << endl ;
} אַחֵר {
cout << '------------------------' << endl ;
cout << ' \t שחקן השני ניצח' << endl ;
cout << '------------------------' < 0 ) && ( המשחק מתחיל ! = 0 ) ) {

אם ( נגד מחשב )
יד == 1 ? קלט מחשב ( ) : קלט שחקן ( p2 ) ;
אַחֵר
יד == 1 ? קלט שחקן ( p1 ) : קלט שחקן ( p2 ) ;
יד = ! יד ;
displayBoard ( ) ;
checkWin ( p1,p2 ) ;
}
אם ( emptyCount <= 0 ) {
cout << '      ------------------------------' << endl ;
cout << ' \t אין מנצח' << endl ;
cout << '      ------------------------------' << endl ;
}
cout << endl ;
cout <> משחק חוזר ;
אם ( ( משחק חוזר == 'ו' ) || ( משחק חוזר == 'ו' ) ) {
חוֹם ( ) ;
לְשַׂחֵק ( p1,p2 ) ;
}

}
בָּטֵל displayScore ( שחקן & p1, שחקן & p2 ) {
cout << endl ;
cout << ' \t ציון: \t ' ;
אם ( נגד מחשב )
cout << 'שחקן I:' << p1. getScore ( ) << ' \t מחשב: ' << p2. getScore ( ) << endl ;
אַחֵר
cout << 'שחקן I:' << p1. getScore ( ) << ' \t שחקן שני: ' << p2. getScore ( ) << endl ;
}

פּוּמְבֵּי :
מִשְׂחָק ( ) : emptyCount { 0 } , המשחק מתחיל { 1 } , נגד מחשב { 0 } {
חוֹם ( ) ;
winlist [ 0 ] . שׁוּרָה = חָדָשׁ int [ 3 ] { 0 , 1 , 2 } ;
winlist [ 1 ] . שׁוּרָה = חָדָשׁ int [ 3 ] { 3 , 4 , 5 } ;
winlist [ 2 ] . שׁוּרָה = חָדָשׁ int [ 3 ] { 6 , 7 , 8 } ;
winlist [ 3 ] . שׁוּרָה = חָדָשׁ int [ 3 ] { 0 , 3 , 6 } ;
winlist [ 4 ] . שׁוּרָה = חָדָשׁ int [ 3 ] { 1 , 4 , 7 } ;
winlist [ 5 ] . שׁוּרָה = חָדָשׁ int [ 3 ] { 2 , 5 , 8 } ;
winlist [ 6 ] . שׁוּרָה = חָדָשׁ int [ 3 ] { 0 , 4 , 8 } ;
winlist [ 7 ] . שׁוּרָה = חָדָשׁ int [ 3 ] { 2 , 4 , 6 } ;
}

בָּטֵל חוֹם ( ) {
המשחק מתחיל = 1 ;

emptyCount = 0 ;
srand ( זְמַן ( 0 ) ) ;
ל ( size_t אני = 0 ; אני < 10 ; אני ++ ) {
ריקאינדקס [ אני ] = 0 ;
גלשן [ אני ] = ( אני + 1 ) + '0' ;
emptyCount ++ ;
}
emptyCount -- ;
}

בָּטֵל onePlayerGame ( ) {
//יוצר נגן
נגן ע ( 'שחקן אני' ) ;
שחקן ג ( 'מַחשֵׁב' ) ;
cout << '       ----------------------------' << endl ;
cout << ' \t שחקן I: X \t מחשב: O' << endl ;
cout << '       ----------------------------' << endl ;
cout << endl ;
נגד מחשב = 1 ;
לְשַׂחֵק ( ג, עמ' ) ;

}

בָּטֵל twoPlayerGame ( ) {
//יוצר נגן
נגן ע ( 'שחקן אני' ) ;
שחקן ג ( 'שחקן שני' ) ;
cout << '       ----------------------------' << endl ;
cout << ' \t שחקן I: X \t שחקן II: O' << endl ;
cout << '       ----------------------------' << endl ;
cout << endl ;
נגד מחשב = 0 ;
לְשַׂחֵק ( ג, עמ' ) ;
}
} ;

int רָאשִׁי ( )
{
int ch ;

בזמן ( 1 ) {
cout << '      ---------תפריט----------' << endl ;
cout << ' \t משחק 1. שחקן אחד' << endl ;
cout << ' \t 2. משחק 2 שחקנים' << endl ;
cout << ' \t 3. כדי לצאת ' << endl ;
cout << '      ---------' << endl ;
cout << endl ;
cout << ' \t בחר אפשרות' <> ch ;
החלף ( ch ) {
מקרה 1 : {
מִשְׂחָק * מִשְׂחָק = חָדָשׁ מִשְׂחָק ;
מִשְׂחָק - > חוֹם ( ) ;
מִשְׂחָק - > onePlayerGame ( ) ;
}
לשבור ;
מקרה 2 : {
מִשְׂחָק * מִשְׂחָק = חָדָשׁ מִשְׂחָק ;
מִשְׂחָק - > חוֹם ( ) ;
מִשְׂחָק - > twoPlayerGame ( ) ;
}
לשבור ;
מקרה 3 :
לַחֲזוֹר 0 ;
בְּרִירַת מֶחדָל :
cout << 'אופס אפשרות לא חוקית! נסה שוב' ;
}

}
לַחֲזוֹר 0 ;
}

זהו קוד שלם לביצוע משחק הטיק-טק, אותו ניתן לשחק בשני מצבים, או עם מחשב או עם בן אדם. זהו קוד רב תכליתי, הכולל את כל הפקודות האפשריות. כאשר המשתמש מזין עמדה שכבר מלאה, הוא אינו מחליף עמדה זו ורואה את המהלך הזה לא חוקי.

עד עכשיו שחקן ראשון בחר את התיבה הראשונה ואז בתור הבא המחשב סימן את התיבה השישית:

שני השחקנים בחרו את שתי התיבות עד עכשיו ובתור הבא השחקן I בוחר את התיבה השביעית וכתוצאה מכך נוצר תבנית אנכית עוקבת:

המשתמש בוחר להשתמש במחשב כדי לשחק משחק, אז לאחר ביצוע שלושה מהלכים, המשתמש ניצח מהמחשב וניקוד אחד מתווסף לרשומה של שחקן 1. לאחר סיום המשחק הראשון, המהדר מבקש את המשחק החוזר. המשתמש מחליט מהאפשרויות והתוכנית חוזרת לחלק הראשי. לאחר בחירה באפשרות שלוש המהדר קיים ביצוע קוד.

סיכום

משחקים מבוססי טקסט מסתמכים על דמויות טקסט וממשק שורת פקודה לאינטראקציה עם השחקן. אין להם תמונות גרפיות, צלילים או אנימציות. המשתמש מזין את הפקודה דרך חלון המסוף. המשחק הידידותי למשתמש המבוסס על טקסט בנוי באמצעות C++. הוא משתמש בפקודות שונות כדי ליצור משחק שניתן לשחק בו עם מחשב או עם שחקן אחר.