কিভাবে C++ এ একটি বেসিক টেক্সট-ভিত্তিক গেম তৈরি করবেন

Kibhabe C E Ekati Besika Teksata Bhittika Gema Tairi Karabena



পাঠ্য-ভিত্তিক গেমগুলি প্লেয়ারের সাথে মিথস্ক্রিয়া করার জন্য পাঠ্য অক্ষর এবং একটি কমান্ড লাইন ইন্টারফেসের উপর নির্ভর করে। তাদের গ্রাফিক্যাল ছবি, শব্দ বা অ্যানিমেশন নেই। ব্যবহারকারী কনসোল উইন্ডোর মাধ্যমে কমান্ড ইনপুট করে।

কিভাবে C++ এ একটি বেসিক টেক্সট-ভিত্তিক গেম তৈরি করবেন

C++ এ টেক্সট-ভিত্তিক গেম প্লেয়ারকে একটি কনসোল উইন্ডোর মাধ্যমে কমান্ড ইনপুট করার অনুমতি দেয় এবং প্রোগ্রামটি প্লেয়ারের চালগুলি প্রক্রিয়া করে। এখানে, আমি একটি টেক্সট-ভিত্তিক টিক-ট্যাক-টো গেম তৈরি করেছি যা ব্যবহারকারীদের খেলার জন্য দুটি বিকল্পের অনুমতি দেয়। ব্যবহারকারী হয় C++ কম্পাইলারের সাথে বা সহকর্মী মানুষের সাথে খেলতে পারে। এই গেমটিতে একটি বৈশিষ্ট্য রয়েছে যা বিজয়ী খেলোয়াড়ের জন্য স্কোর যোগ করতে থাকে। প্রথম খেলার ফলাফল ঘোষণা করার পরে, একটি রিম্যাচ বিকল্প উপলব্ধ।

খেলা জেতার নিয়ম

দুই খেলোয়াড় একটি টিক-ট্যাক-টো গেম খেলে, X এবং 0 বিকল্পভাবে থ্রি-বাই-থ্রি গ্রিডে নয়টি উপলব্ধ স্থানের একটিতে রেখে। গেমটি প্রথম খেলোয়াড়ের দ্বারা জিতে যায় যে তার একটি উল্লম্ব, অনুভূমিক, বা তির্যক দিক থেকে তার পরপর তিনটি চিহ্ন অর্জন করে। প্রতিটি খেলোয়াড়কে স্মার্টভাবে চিন্তা করতে হবে এবং অন্য খেলোয়াড়ের পরবর্তী পদক্ষেপের জন্য অপেক্ষা করতে হবে।







একটি টেক্সট-ভিত্তিক টিক-ট্যাক-টো গেম ডিজাইন করার কোডের বিভিন্ন বিভাগ রয়েছে, কার্যকারিতার ভিত্তিতে বিভক্ত। প্রথম বিভাগে, ব্যবহারকারী একটি কম্পিউটার বা একজন সহমানব মানুষের সাথে খেলবেন কিনা তা সিদ্ধান্ত নেয়। লাভের মোড নির্ধারণ করার পরে, প্রোগ্রামটি ব্যবহারকারীকে ইনপুট জন্য জিজ্ঞাসা করে। উভয় খেলোয়াড় একের পর এক ইনপুট প্রবেশ করে।



// খেলোয়াড়দের কাছ থেকে ইনপুট নিন
অকার্যকর প্লেয়ার ইনপুট ( প্লেয়ার এবং খেলোয়াড় ) {
int অবস্থান ;
cout << endl ;
cout << ' \t ' << খেলোয়াড় getName ( ) << 'পালা:' ;
cout << ' \t অবস্থান লিখুন ' <> অবস্থান ;
অবস্থান - = 1 ;
যদি ( খালি সূচক [ অবস্থান ] == 1 ) {
cout << '------পদ খালি নয়------' << endl ;
প্লেয়ার ইনপুট ( খেলোয়াড় ) ;
} অন্য {
খালি সূচক [ অবস্থান ] = 1 ;
খালি গণনা - = 1 ;
খেলোয়াড় getName ( ) . তুলনা করা ( 'খেলোয়াড় I' ) == 0 ? বোর্ড [ অবস্থান ] = 'এক্স' : বোর্ড [ অবস্থান ] = 'ও' ;
}

}

ব্যবহারকারীর কাছ থেকে ইনপুট নেওয়ার পরে, এটি জয়ের নিয়ম পরীক্ষা করে। প্লেয়ার জিতেছে কি না তা পরীক্ষা করার জন্য checkWin() ফাংশনে p1 এবং p2 দুটি প্যারামিটার রয়েছে। i, j, এবং k ফাংশনে বিভিন্ন ভেরিয়েবল ঘোষণা করা হয় লুপের জন্য ঘোষিত পূর্ণসংখ্যার ভেরিয়েবল এবং পতাকাটি একটি বুলিয়ান ফাংশন যা বিজয়ের অবস্থা পরীক্ষা করে। লুপটি প্রথম অবস্থান থেকে শুরু হয় এবং নয়টি অবস্থানের জন্য পুনরাবৃত্তি করতে থাকে। first_symbol হল এমন একটি অক্ষর যা 0 বা X হতে পারে যদি এটি সত্য হয় তবে বিজয়ী নিয়মের জন্য এটির সমস্ত সম্ভাব্য সমন্বয় পরীক্ষা করা হয়। অন্যথায়, পুনরাবৃত্তিকারী পরবর্তী অবস্থানে চলে যায় এবং সমস্ত সম্ভাব্য অবস্থান চেক না হওয়া পর্যন্ত একইভাবে চলতে থাকে। যদি পতাকাটি সত্য হিসাবে সেট করা হয়, তাহলে একজন বিজয়ী ঘোষণা করা হয় এবং প্রোগ্রামটি আবার পছন্দ করতে বলে।



অকার্যকর চেকউইন ( প্লেয়ার এবং p1, প্লেয়ার এবং p2 ) {
int i, j, k ;
bool পতাকা = মিথ্যা ;
চর প্রথম_চিহ্ন ;
জন্য ( i = 0 ; i < 8 ; i ++ ) {
প্রথম_চিহ্ন = বোর্ড [ বিজয়ী তালিকা [ i ] . সারি [ 0 ] ] ;

যদি ( ( প্রথম_চিহ্ন ! = 'এক্স' ) && ( প্রথম_চিহ্ন ! = 'ও' ) ) {
পতাকা = মিথ্যা ;
চালিয়ে যান ;
}
পতাকা = সত্য ;
জন্য ( j = 0 ; j < 3 ; j ++ ) {
যদি ( প্রথম_চিহ্ন ! = বোর্ড [ বিজয়ী তালিকা [ i ] . সারি [ j ] ] ) {
পতাকা = মিথ্যা ;
বিরতি ;
}
}
যদি ( পতাকা ) {
খেলা শুরু = 0 ;
যদি ( প্রথম_চিহ্ন == 'এক্স' ) {
cout << '------------' << endl ;
cout << ' \t খেলোয়াড় আমি জিতেছি' << endl ;
cout << '------------' << endl ;
p1. জিতেছে ( ) ;
} অন্য {
p2. জিতেছে ( ) ;
যদি ( কম্পিউটারের বিরুদ্ধে ) {
cout << '------------' << endl ;
cout << ' \t কম্পিউটার জিতেছে' << endl ;
cout << '------------' << endl ;
} অন্য {
cout << '------------' << endl ;
cout << ' \t দ্বিতীয় প্লেয়ার জিতেছে' << endl ;
cout << '------------' << endl ;

}
}
ডিসপ্লেস্কোর ( p1, p2 ) ;
বিরতি ;
}

কোডের এই অংশটি গেমের স্কোর দেখায়। যদি গেমটি একটি কম্পিউটারের বিরুদ্ধে হয়, তাহলে প্লেয়ার 1 এবং কম্পিউটারের জন্য স্কোর প্রদর্শিত হয়, অন্যথায়, প্লেয়ার 1 এবং প্লেয়ার 2 এর জন্য স্কোর প্রদর্শিত হয়।





অকার্যকর ডিসপ্লেস্কোর ( প্লেয়ার এবং p1, প্লেয়ার এবং p2 ) {
cout << endl ;
cout << ' \t স্কোর: \t ' ;
যদি ( কম্পিউটারের বিরুদ্ধে )
cout << 'খেলোয়াড় I:' << p1. getScore ( ) << ' \t কম্পিউটার: ' << p2. getScore ( ) << endl ;
অন্য
cout << 'খেলোয়াড় I:' << p1. getScore ( ) << ' \t প্লেয়ার II: ' << p2. getScore ( ) << endl ;
}

এটি দুটি খেলোয়াড়ের জন্য টিক-ট্যাক-টো গেমটি কার্যকর করার জন্য প্রধান কোড। সুইচ কেস স্টেটমেন্ট ব্যবহার করে ব্যবহারকারী বিভিন্ন পদ্ধতি থেকে নির্বাচন করতে পারেন। এই কোডটি একটি C++ কম্পাইলারে একটি গেম খেলার জন্য একটি ব্যবহারকারী-বান্ধব ইন্টারফেস প্রদান করে এবং ব্যবহারকারী প্রস্থান বিকল্পটি নির্বাচন না করা পর্যন্ত কোডটি কার্যকর করতে থাকে।

int প্রধান ( )
{
int সিএইচ ;

যখন ( 1 ) {
cout << ' ----------তালিকা----------' << endl ;
cout << ' \t 1. 1 খেলোয়াড়ের খেলা' << endl ;
cout << ' \t 2. 2 প্লেয়ার গেম' << endl ;
cout << ' \t 3. প্রস্থান করতে ' << endl ;
cout << '      ---------' << endl ;
cout << endl ;
cout << ' \t যেকোনো একটি নির্বাচন করুন' <> সিএইচ ;
সুইচ ( সিএইচ ) {
মামলা 1 : {
খেলা * খেলা = নতুন খেলা ;
খেলা - > তাপ ( ) ;
খেলা - > এক প্লেয়ার গেম ( ) ;
}
বিরতি ;
মামলা 2 : {
খেলা * খেলা = নতুন খেলা ;
খেলা - > তাপ ( ) ;
খেলা - > দুই প্লেয়ার গেম ( ) ;
}
বিরতি ;
মামলা 3 :
প্রত্যাবর্তন 0 ;
ডিফল্ট :
cout << 'OOPs অবৈধ বিকল্প! আবার চেষ্টা করুন' ;
}

}
প্রত্যাবর্তন 0 ;
}

একটি টেক্সট-ভিত্তিক টিক-ট্যাক-টক গেমের জন্য সম্পূর্ণ কোড

এটি একটি পাঠ্য-ভিত্তিক টিক-ট্যাক-টো গেমের নকশা এবং সম্পাদনের জন্য একটি সম্পূর্ণ কোড।



# অন্তর্ভুক্ত করুন
# অন্তর্ভুক্ত <তালিকা>
# অন্তর্ভুক্ত করুন
#include
# অন্তর্ভুক্ত করুন
ব্যবহার নামস্থান std ;

typedef গঠন {
int * সারি ;
} উইনলিস্ট ;


ক্লাস প্লেয়ার {
ব্যক্তিগত :
স্ট্রিং নাম ;
int স্কোর ;
পাবলিক :
প্লেয়ার ( ) : প্লেয়ার { '' } { }
প্লেয়ার ( স্ট্রিং n ) : স্কোর { 0 } , নাম { n } { }

অকার্যকর জিতেছে ( ) {
//স্কোর বাড়ান
স্কোর ++ ;
}
int getScore ( ) { প্রত্যাবর্তন এই - > স্কোর ; }

স্ট্রিং getName ( ) { প্রত্যাবর্তন এই - > নাম ; }
} ;

ক্লাস খেলা {
ব্যক্তিগত :
চর বোর্ড [ 9 ] ;
int খালি সূচক [ 9 ] ;
int গেম অন, কম্পিউটারের বিরুদ্ধে ;
int খালি গণনা ;
উইনলিস্ট উইনলিস্ট [ 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 ;
}

অকার্যকর কম্পিউটার ইনপুট ( ) {
int অবস্থান ;
অবস্থান = রান্ড ( ) % 10 ;
যদি ( খালি সূচক [ অবস্থান ] == 1 ) {
যদি ( খালি গণনা < 0 )
প্রত্যাবর্তন ;
কম্পিউটার ইনপুট ( ) ;
} অন্য {
cout << 'কম্পিউটার চয়ন করুন:' << অবস্থান + 1 << endl ;
খালি সূচক [ অবস্থান ] = 1 ;
খালি গণনা - = 1 ;
বোর্ড [ অবস্থান ] = 'ও' ;
}

}

অকার্যকর প্লেয়ার ইনপুট ( প্লেয়ার এবং খেলোয়াড় ) {
int অবস্থান ;
cout << endl ;
cout << ' \t ' << খেলোয়াড় getName ( ) << 'পালা:' ;
cout << ' \t অবস্থান লিখুন ' <> অবস্থান ;
অবস্থান - = 1 ;
যদি ( খালি সূচক [ অবস্থান ] == 1 ) {
cout << '------পদ খালি নয়------' << endl ;
প্লেয়ার ইনপুট ( খেলোয়াড় ) ;
} অন্য {
খালি সূচক [ অবস্থান ] = 1 ;
খালি গণনা - = 1 ;
খেলোয়াড় getName ( ) . তুলনা করা ( 'খেলোয়াড় I' ) == 0 ? বোর্ড [ অবস্থান ] = 'এক্স' : বোর্ড [ অবস্থান ] = 'ও' ;
}

}

অকার্যকর চেকউইন ( প্লেয়ার এবং p1, প্লেয়ার এবং p2 ) {
int i, j, k ;
bool পতাকা = মিথ্যা ;
চর প্রথম_চিহ্ন ;
জন্য ( i = 0 ; i < 8 ; i ++ ) {
প্রথম_চিহ্ন = বোর্ড [ বিজয়ী তালিকা [ i ] . সারি [ 0 ] ] ;

যদি ( ( প্রথম_চিহ্ন ! = 'এক্স' ) && ( প্রথম_চিহ্ন ! = 'ও' ) ) {
পতাকা = মিথ্যা ;
চালিয়ে যান ;
}
পতাকা = সত্য ;
জন্য ( j = 0 ; j < 3 ; j ++ ) {
যদি ( প্রথম_চিহ্ন ! = বোর্ড [ বিজয়ী তালিকা [ i ] . সারি [ j ] ] ) {
পতাকা = মিথ্যা ;
বিরতি ;
}
}
যদি ( পতাকা ) {
খেলা শুরু = 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 ) ;
হাত = ! হাত ;
ডিসপ্লে বোর্ড ( ) ;
চেকউইন ( p1, p2 ) ;
}
যদি ( খালি গণনা <= 0 ) {
cout << '      ------------' << endl ;
cout << ' \t কোন বিজয়ী নেই' << endl ;
cout << '      ------------' << endl ;
}
cout << endl ;
cout <> পুনরায় ম্যাচ ;
যদি ( ( পুনরায় ম্যাচ == 'এবং' ) || ( পুনরায় ম্যাচ == 'এবং' ) ) {
তাপ ( ) ;
খেলা ( p1, p2 ) ;
}

}
অকার্যকর ডিসপ্লেস্কোর ( প্লেয়ার এবং p1, প্লেয়ার এবং p2 ) {
cout << endl ;
cout << ' \t স্কোর: \t ' ;
যদি ( কম্পিউটারের বিরুদ্ধে )
cout << 'খেলোয়াড় I:' << p1. getScore ( ) << ' \t কম্পিউটার: ' << p2. getScore ( ) << endl ;
অন্য
cout << 'খেলোয়াড় I:' << p1. getScore ( ) << ' \t প্লেয়ার II: ' << p2. getScore ( ) << endl ;
}

সর্বজনীন :
খেলা ( ) : খালি গণনা { 0 } , খেলা শুরু { 1 } , কম্পিউটারের বিরুদ্ধে { 0 } {
তাপ ( ) ;
বিজয়ী তালিকা [ 0 ] . সারি = নতুন int [ 3 ] { 0 , 1 , 2 } ;
বিজয়ী তালিকা [ 1 ] . সারি = নতুন int [ 3 ] { 3 , 4 , 5 } ;
বিজয়ী তালিকা [ 2 ] . সারি = নতুন int [ 3 ] { 6 , 7 , 8 } ;
বিজয়ী তালিকা [ 3 ] . সারি = নতুন int [ 3 ] { 0 , 3 , 6 } ;
বিজয়ী তালিকা [ 4 ] . সারি = নতুন int [ 3 ] { 1 , 4 , 7 } ;
বিজয়ী তালিকা [ 5 ] . সারি = নতুন int [ 3 ] { 2 , 5 , 8 } ;
বিজয়ী তালিকা [ 6 ] . সারি = নতুন int [ 3 ] { 0 , 4 , 8 } ;
বিজয়ী তালিকা [ 7 ] . সারি = নতুন int [ 3 ] { 2 , 4 , 6 } ;
}

অকার্যকর তাপ ( ) {
খেলা শুরু = 1 ;

খালি গণনা = 0 ;
srand ( সময় ( 0 ) ) ;
জন্য ( size_t i = 0 ; i < 10 ; i ++ ) {
খালি সূচক [ i ] = 0 ;
বোর্ড [ i ] = ( i + 1 ) + '0' ;
খালি গণনা ++ ;
}
খালি গণনা -- ;
}

অকার্যকর এক প্লেয়ার গেম ( ) {
//প্লেয়ার তৈরি করা হচ্ছে
খেলোয়াড় পি ( 'খেলোয়াড় I' ) ;
খেলোয়াড় গ ( 'কম্পিউটার' ) ;
cout << '       -----------' << endl ;
cout << ' \t প্লেয়ার I: এক্স \t কম্পিউটার: O' << endl ;
cout << '       -----------' << endl ;
cout << endl ;
কম্পিউটারের বিরুদ্ধে = 1 ;
খেলা ( c, p ) ;

}

অকার্যকর দুই প্লেয়ার গেম ( ) {
//প্লেয়ার তৈরি করা হচ্ছে
খেলোয়াড় পি ( 'খেলোয়াড় I' ) ;
খেলোয়াড় গ ( 'প্লেয়ার II' ) ;
cout << '       -----------' << endl ;
cout << ' \t প্লেয়ার I: এক্স \t প্লেয়ার II: O' << endl ;
cout << '       -----------' << endl ;
cout << endl ;
কম্পিউটারের বিরুদ্ধে = 0 ;
খেলা ( c, p ) ;
}
} ;

int প্রধান ( )
{
int সিএইচ ;

যখন ( 1 ) {
cout << ' ----------তালিকা----------' << endl ;
cout << ' \t 1. 1 খেলোয়াড়ের খেলা' << endl ;
cout << ' \t 2. 2 প্লেয়ার গেম' << endl ;
cout << ' \t 3. প্রস্থান করতে ' << endl ;
cout << '      ---------' << endl ;
cout << endl ;
cout << ' \t যেকোনো একটি নির্বাচন করুন' <> সিএইচ ;
সুইচ ( সিএইচ ) {
মামলা 1 : {
খেলা * খেলা = নতুন খেলা ;
খেলা - > তাপ ( ) ;
খেলা - > এক প্লেয়ার গেম ( ) ;
}
বিরতি ;
মামলা 2 : {
খেলা * খেলা = নতুন খেলা ;
খেলা - > তাপ ( ) ;
খেলা - > দুই প্লেয়ার গেম ( ) ;
}
বিরতি ;
মামলা 3 :
প্রত্যাবর্তন 0 ;
ডিফল্ট :
cout << 'OOPs অবৈধ বিকল্প! আবার চেষ্টা করুন' ;
}

}
প্রত্যাবর্তন 0 ;
}

এটি টিক-ট্যাক-টো গেমটি চালানোর জন্য একটি সম্পূর্ণ কোড, যেটি দুটি মোডে খেলা যায়, হয় কম্পিউটার বা একজন সহমানুষের সাথে। এটি একটি বহুমুখী কোড, সমস্ত সম্ভাব্য কমান্ড সহ। যখন ব্যবহারকারী এমন একটি অবস্থান ইনপুট করে যা ইতিমধ্যেই পূরণ করা হয়েছে, তখন এটি এই অবস্থানটিকে ওভাররাইট করে না এবং এই পদক্ষেপটিকে অবৈধ বলে মনে করে।

এখন পর্যন্ত একজন খেলোয়াড় প্রথম বাক্সটি নির্বাচন করেছে এবং তারপরে পরের দিকে কম্পিউটার ষষ্ঠ বাক্সটি চিহ্নিত করেছে:

উভয় খেলোয়াড়ই এখন পর্যন্ত দুটি বাক্স নির্বাচন করেছে এবং পরবর্তী পালাটিতে আমি সপ্তম বাক্সটি বেছে নেব যার ফলে একটি ধারাবাহিক উল্লম্ব প্যাটার্ন তৈরি হবে:

ব্যবহারকারী একটি গেম খেলার জন্য কম্পিউটার ব্যবহার করা বেছে নেয়, তাই তিনটি চাল নেওয়ার পরে, ব্যবহারকারী কম্পিউটার থেকে জিতে যায় এবং প্লেয়ার 1 এর রেকর্ডে একটি স্কোর যোগ করা হয়। প্রথম ম্যাচ শেষ হওয়ার পর, কম্পাইলার পুনরায় ম্যাচের জন্য জিজ্ঞাসা করে। ব্যবহারকারী বিকল্পগুলি থেকে সিদ্ধান্ত নেয় এবং প্রোগ্রামটি মূল বিভাগে ফিরে আসে। বিকল্প তিনটি বেছে নেওয়ার পরে কম্পাইলার কোডের এক্সিকিউশন বিদ্যমান।

উপসংহার

পাঠ্য-ভিত্তিক গেমগুলি প্লেয়ারের সাথে মিথস্ক্রিয়া করার জন্য পাঠ্য অক্ষর এবং একটি কমান্ড লাইন ইন্টারফেসের উপর নির্ভর করে। তাদের গ্রাফিক্যাল ছবি, শব্দ বা অ্যানিমেশন নেই। ব্যবহারকারী কনসোল উইন্ডোর মাধ্যমে কমান্ড ইনপুট করে। ব্যবহারকারী-বান্ধব পাঠ্য-ভিত্তিক টিক-ট্যাক-টো গেমটি C++ ব্যবহার করে তৈরি করা হয়েছে। এটি একটি গেম তৈরি করতে বিভিন্ন কমান্ড ব্যবহার করে যা হয় একটি কম্পিউটার বা অন্য সহযোগী খেলোয়াড়ের সাথে খেলা যায়।