Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- enum Color {empty, Black, White}; // לבנים למטה
- enum erors {good, bed_arguments, first_location_empty, second_location_not_empty, bad_direction,
- Not_in_the_same_diagonal, second_location_is_a_white_square, opponent_tries_to_eat_himself,
- Skipping};
- class Square{ //משבצת
- public:
- Color Soldier_Color;
- bool king;
- Square(Color CC = empty, bool KK = false){
- Soldier_Color = CC;
- king = KK;
- }
- };
- Square Damka_soldiers [8][8]; // המערך הראשי
- unsigned int AVBTN(int a, int b){ // Absolute_value_between_two_numbers // ערך מוחלט
- if(a>b) return a-b;
- else return b-a;
- }
- Color check_soldier_color_between_two_location(int i1, int b1, int i2, int b2){ // שימו לב שצריכה להיות בדיוק משבצת אחת ביניהם
- return Damka_soldiers[(i1+i2)/2][(b1+b2)/2].Soldier_Color;
- }
- char convert_to_symbol(int i, int b){ // מקבל מקום במערך הדמקה ומחזיר סמל
- if(Damka_soldiers[i][b].Soldier_Color == White){
- if(Damka_soldiers[i][b].king==false) return 'W';
- else return (char)233; // מלך
- }
- if(Damka_soldiers[i][b].Soldier_Color == Black){
- if(Damka_soldiers[i][b].king==false) return 'B';
- else return 232;
- }
- else {
- if((i+b)%2==1) return 176; // ה 176 זה הצבע של השחור
- else return 177;
- }
- }
- void Epmty_The_board(char damka[8][8]){
- int i,a,b;
- for(i=0;i<8;i=i+2){ // לשורות הזוגיות
- for(b=0;b<8;b++){
- if(b%2==0)damka[i][b]=176; // משחק עצלנות עם מצביעים
- else damka[i][b]=177;
- }
- }
- for(i=1;i<8;i=i+2){ // לשורות האי זוגיות
- for(b=0;b<8;b++){
- if(b%2==1)damka[i][b]=176; // משחק עצלנות עם מצביעים
- else damka[i][b]=177;
- }
- }
- }
- void Print_Damka(){
- int i,a,b;
- cout<<" ABCDEFGE";
- for(i=0; i<8; i++){
- for(b=0;b<8;b++){
- if(b%8==0) cout<<"\n";
- if(b==0)cout<<i+1<<" "; //מיספור
- cout<<convert_to_symbol(i,b);
- }
- }
- cout<<"\n\n";
- }
- void Order_First_Damka(){
- int i,a,b;
- for(i=0; i<3; i++){
- for(b=0;b<8;b++){
- if ((i+b)%2==1)Damka_soldiers[i][b]=Black;
- }
- }
- for(i=5; i<8; i++){
- for(b=0;b<8;b++){
- if ((i+b)%2==1)Damka_soldiers[i][b]=White;
- }
- }
- }
- erors move_soldier(int i1, int b1, int i2, int b2, bool sharsheret = false){
- /*
- הפונקציה בודקת שהעברה אפשרית, אם כן - מעבירה חיילים ומשיבה הצלחה
- אחרת - משיבה כישלון ומחזירה את סוג הכישלון
- סוגי כישלון:
- המיקומים שקיבלנו הם מחוץ ללוח .1
- 2. הייעד כבר תפוס, או שהמוצא ריק
- 3. היעד הוא משבצת לבנה
- 4. המוצא והיעד לא על אותו אלכסון
- 5. חייל (לא מלך) לבן יורד, או חייל שחור עולה. למעט מהלך שרשרת
- 6. :בחייל (לא מלך) עליו לדלג רק משבצת אלכסונית אחת. ואם הוא אוכל אז רק שתיים, ואז עלינו לבדוק שהאכילה תקינה
- .יש בין המוצא ליעד חייל. והוא לא מאותו צבע
- הגעתי עד כאן
- 7. :אם זה מלך אז הוא יכול ללכת כל מספר שורות (שהוכח כבר שהן בתוך המשחק) אבל בתנאי
- .אין חיילים מאותו צבע בדרך
- .אין יותר מחייל עוין אחד
- .אופציונלי: עליו לעצור מייד אחרי חייל עויין בלי להתרחק ממנו
- */
- if(i1>7||i1<0||b1>7||b1<0||i2>7||i2<0||b2>7||b2<0) return bed_arguments; // הכלים במקום שלא קיים
- // לעשות:
- // אותו מקום בשניהם
- if(Damka_soldiers[i1][b1].Soldier_Color== empty) return first_location_empty;
- if(Damka_soldiers[i2][b2].Soldier_Color!= empty) return second_location_not_empty; // בדיקה שהיעד ריק. אגב זה גם בודק שהמקום הראשון והשני לא זהים
- if((i2+b2)%2==0) return second_location_is_a_white_square; // יש צורך לבדוק רק את המיקום השני, כי הראשון כבר יודעים שיש בו שחקן
- int AV_i=AVBTN(i1,i2), AV_b=AVBTN(b1,b2); // שמירת ההפרשים מועילה להמשך
- if(AV_i!=AV_b) return Not_in_the_same_diagonal; // בדיקה שזה על אותו אלכסון. נכונה גם עבור מלכים
- if(Damka_soldiers[i1][b1].king == false){ // חייל ולא מלך
- if ((Damka_soldiers[i1][b1].Soldier_Color == White && i1>=i2 && sharsheret == false)||
- (Damka_soldiers[i1][b1].Soldier_Color == Black && i1<=i2 && sharsheret == false)) return bad_direction; // כיוון לא נכון
- if(AV_i==2){ // נבדוק אם יש ביניהם חייל מאותו צד ואז זו פגיעה עצמית, או אם אין כלל חייל ואז זה דילוג
- if((Damka_soldiers[i1][b1].Soldier_Color==White && check_soldier_color_between_two_location(i1,b1,i2,b2)==White)||
- (Damka_soldiers[i1][b1].Soldier_Color==Black && check_soldier_color_between_two_location(i1,b1,i2,b2)==Black)){
- return opponent_tries_to_eat_himself;
- }
- if (check_soldier_color_between_two_location(i1,b1,i2,b2)==empty) return Skipping;
- }
- if (AV_i>2) return Skipping;
- }
- else{ // אם זה מלך
- // צריך לדון בדיוק מה מותר ואסור למלך לעשות כדי לכתוב את זה. // ///// // ///// //
- }
- }
- void main(){
- Order_First_Damka();
- Print_Damka();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement