Advertisement
Noam_15

דמקה V1.1

Apr 27th, 2017
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.52 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. enum Color {empty, Black, White}; // לבנים למטה
  4. enum erors {good, bed_arguments, first_location_empty, second_location_not_empty, bad_direction,
  5.             Not_in_the_same_diagonal, second_location_is_a_white_square, opponent_tries_to_eat_himself,
  6.             Skipping};
  7.  
  8. class Square{  //משבצת
  9. public:
  10.     Color Soldier_Color;
  11.     bool king;
  12.     Square(Color CC = empty, bool KK = false){
  13.         Soldier_Color = CC;
  14.         king = KK;
  15.     }
  16. };
  17.  
  18.  
  19. Square Damka_soldiers [8][8];   //  המערך הראשי
  20.  
  21.  
  22. unsigned int  AVBTN(int a, int b){  // Absolute_value_between_two_numbers // ערך מוחלט
  23.     if(a>b) return a-b;
  24.     else return b-a;
  25. }
  26.  
  27. Color check_soldier_color_between_two_location(int i1, int b1, int i2, int b2){ // שימו לב שצריכה להיות בדיוק משבצת אחת ביניהם
  28.     return Damka_soldiers[(i1+i2)/2][(b1+b2)/2].Soldier_Color;
  29. }
  30.  
  31.  
  32. char convert_to_symbol(int i, int b){  //  מקבל מקום במערך הדמקה ומחזיר סמל
  33.     if(Damka_soldiers[i][b].Soldier_Color == White){
  34.         if(Damka_soldiers[i][b].king==false) return 'W';
  35.         else  return (char)233; // מלך
  36.     }
  37.     if(Damka_soldiers[i][b].Soldier_Color == Black){
  38.         if(Damka_soldiers[i][b].king==false) return 'B';
  39.         else  return 232;
  40.     }
  41.     else {
  42.         if((i+b)%2==1) return 176; // ה 176 זה הצבע של השחור
  43.         else return 177;
  44.     }
  45. }
  46.  
  47. void Epmty_The_board(char damka[8][8]){
  48.     int i,a,b;
  49.  
  50.     for(i=0;i<8;i=i+2){ // לשורות הזוגיות
  51.         for(b=0;b<8;b++){
  52.             if(b%2==0)damka[i][b]=176;  // משחק עצלנות עם מצביעים
  53.             else damka[i][b]=177;
  54.         }
  55.     }
  56.     for(i=1;i<8;i=i+2){  // לשורות האי זוגיות
  57.         for(b=0;b<8;b++){
  58.             if(b%2==1)damka[i][b]=176;  // משחק עצלנות עם מצביעים
  59.             else damka[i][b]=177;
  60.         }
  61.     }
  62.  
  63. }
  64.  
  65. void Print_Damka(){
  66.     int i,a,b;
  67.     cout<<"  ABCDEFGE";
  68.     for(i=0; i<8; i++){
  69.         for(b=0;b<8;b++){
  70.             if(b%8==0) cout<<"\n";
  71.             if(b==0)cout<<i+1<<" ";  //מיספור
  72.             cout<<convert_to_symbol(i,b);
  73.         }
  74.     }
  75.     cout<<"\n\n";  
  76. }
  77.  
  78. void Order_First_Damka(){
  79.     int i,a,b;
  80.     for(i=0; i<3; i++){
  81.         for(b=0;b<8;b++){
  82.             if ((i+b)%2==1)Damka_soldiers[i][b]=Black;
  83.         }
  84.     }
  85.     for(i=5; i<8; i++){
  86.         for(b=0;b<8;b++){
  87.             if ((i+b)%2==1)Damka_soldiers[i][b]=White;
  88.         }
  89.     }
  90.  
  91. }
  92.  
  93. erors move_soldier(int i1, int b1, int i2, int b2, bool sharsheret = false){
  94.     /*
  95.     הפונקציה בודקת שהעברה אפשרית, אם כן - מעבירה חיילים ומשיבה הצלחה
  96.     אחרת - משיבה כישלון ומחזירה את סוג הכישלון
  97.     סוגי כישלון:
  98.     המיקומים שקיבלנו הם מחוץ ללוח  .1
  99.     2.  הייעד כבר תפוס, או שהמוצא ריק
  100.     3.  היעד הוא משבצת לבנה
  101.     4.  המוצא והיעד לא על אותו אלכסון
  102.     5.  חייל (לא מלך) לבן יורד, או חייל שחור עולה. למעט מהלך שרשרת
  103.  
  104.     6.  :בחייל (לא מלך) עליו לדלג רק משבצת אלכסונית אחת. ואם הוא אוכל אז רק שתיים, ואז עלינו לבדוק שהאכילה תקינה
  105.          .יש בין המוצא ליעד חייל. והוא לא מאותו צבע
  106.  
  107. הגעתי עד כאן
  108.     7.  :אם זה מלך אז הוא יכול ללכת כל מספר שורות (שהוכח כבר שהן בתוך המשחק) אבל בתנאי
  109.          .אין חיילים מאותו צבע בדרך
  110.          .אין יותר מחייל עוין אחד
  111.          .אופציונלי: עליו לעצור מייד אחרי חייל עויין בלי להתרחק ממנו
  112.  
  113.  
  114.  
  115.  
  116.     */
  117.  
  118.  
  119.  
  120.     if(i1>7||i1<0||b1>7||b1<0||i2>7||i2<0||b2>7||b2<0) return bed_arguments; // הכלים במקום שלא קיים
  121.     // לעשות:
  122.     // אותו מקום בשניהם
  123.  
  124.     if(Damka_soldiers[i1][b1].Soldier_Color== empty) return first_location_empty;
  125.     if(Damka_soldiers[i2][b2].Soldier_Color!= empty) return second_location_not_empty; // בדיקה שהיעד ריק. אגב זה גם בודק שהמקום הראשון והשני לא זהים
  126.     if((i2+b2)%2==0) return second_location_is_a_white_square;  // יש צורך לבדוק רק את המיקום השני, כי הראשון כבר יודעים שיש בו שחקן
  127.    
  128.     int AV_i=AVBTN(i1,i2), AV_b=AVBTN(b1,b2); // שמירת ההפרשים מועילה להמשך
  129.     if(AV_i!=AV_b) return Not_in_the_same_diagonal; //  בדיקה שזה על אותו אלכסון. נכונה גם עבור מלכים
  130.  
  131.     if(Damka_soldiers[i1][b1].king == false){ // חייל ולא מלך
  132.         if ((Damka_soldiers[i1][b1].Soldier_Color == White && i1>=i2 && sharsheret == false)||
  133.             (Damka_soldiers[i1][b1].Soldier_Color == Black && i1<=i2 && sharsheret == false)) return bad_direction;  // כיוון לא נכון
  134.         if(AV_i==2){ // נבדוק אם יש ביניהם חייל מאותו צד ואז זו פגיעה עצמית, או אם אין כלל חייל ואז זה דילוג
  135.             if((Damka_soldiers[i1][b1].Soldier_Color==White && check_soldier_color_between_two_location(i1,b1,i2,b2)==White)||
  136.                 (Damka_soldiers[i1][b1].Soldier_Color==Black && check_soldier_color_between_two_location(i1,b1,i2,b2)==Black)){
  137.                     return opponent_tries_to_eat_himself;
  138.             }
  139.             if (check_soldier_color_between_two_location(i1,b1,i2,b2)==empty) return Skipping;
  140.         }
  141.         if (AV_i>2) return Skipping;
  142.     }
  143.  
  144.     else{ // אם זה מלך
  145.  
  146.         // צריך לדון בדיוק מה מותר ואסור למלך לעשות כדי לכתוב את זה.   //   /////   //   /////   //
  147.     }
  148.  
  149.  
  150.  
  151.  
  152. }
  153.  
  154.  
  155.  
  156. void main(){
  157.     Order_First_Damka();
  158.     Print_Damka();
  159. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement