Switch не верно работает - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Столкнулся с одной неприятной штукой. Код у меня может быть немного переполненным лишним и поэтому в нем не сразу разберешься, но, пожалуйста, помогите
Листинг программы
  1. void Play (int Diamonds)
  2. {
  3. int random=rand()%2+1; // рандомный выбор игрока
  4. if (random==1) outtextxy(310,10,"ХОД ПЕРВОГО ИГРОКА");
  5. else outtextxy(310,10,"ХОД ВТОРОГО ИГРОКА");
  6. int x=85, y=130, code, count=1;
  7. setcolor(0);
  8. Draw_Outline(y,count);
  9. while (1)
  10. {
  11. code = getch();
  12. switch (code)
  13. {
  14. case 77: if (getpixel(x+80,y)!=getpixel(20,20)&&getpixel(x+80,y)!=getpixel(805,y)) {x+=80; count++; setcolor(0); Draw_Outline(y,count); break;} // вправо
  15. else break;
  16. case 75: if (getpixel(x,y)==getpixel(x-80,y)) {x-=80; Delete_Outline(y, count); count--; break;} // влево
  17. else break;
  18. case 72: if (getpixel(85,y-80)!=getpixel(85,50)) {Delete_All_Outline(y,count); x=85; y-=80; count=1; setcolor(0); Draw_Outline(y,count); break;} // вверх
  19. else {int j=y; if (j!=130) while (j!=130) {j-=80; if (getpixel(85,j)!=getpixel(20,20)) {Delete_All_Outline(y,count); x=85; y=j; count=1; setcolor(0); Draw_Outline(y,count); break;}break;}}
  20. case 80: if (getpixel(85,y+80)!=getpixel(85,610)&&getpixel(85,y+50)!=getpixel(85,50)) {Delete_All_Outline(y,count); x=85; y+=80; count=1; setcolor(0); Draw_Outline(y,count); break;} // вниз
  21. else {int j=y; if (j!=530) while (j!=530) {j+=80; if (getpixel(85,j)!=getpixel(20,20)) {Delete_All_Outline(y,count); x=85; y=j; count=1; setcolor(0); Draw_Outline(y,count); break;}break;}}
  22. case 13: if (random==1) {random++; setcolor(COLOR(255,0,0)); outtextxy(310,3,"ХОД ПЕРВОГО ИГРОКА");} else {random--; setcolor(COLOR(255,0,0)); outtextxy(310,3,"ХОД ВТОРОГО ИГРОКА");} // Enter
  23. if (Diamonds!=1) {Delete_All_Outline(y,count); Delete_Diamonds(x,y,count); if (getpixel(85,y)==getpixel(20,20)) Diamonds--;}
  24. else {int N=1,j=85; for (int i=0; i<8; i++) {j+=80; if (getpixel(j,y)!=getpixel(20,20)) N++; else i=8;} if (N==count&&count!=1) {Delete_All_Outline(y,count); setcolor(COLOR(255,0,0)); outtextxy(245,582,"ВЫБЕРИТЕ ДРУГОЕ КОЛИЧЕСТВО АЛМАЗОВ!");}
  25. else if (count==1&&N==1) {Victory(random); return;} else {Delete_All_Outline(y,count); Delete_Diamonds(x,y,count);}}
  26. x=85; y=130; while(getpixel(85,y)==getpixel(20,20)) y+=80; count=1; setcolor(0); Draw_Outline(y,count); break;
  27. }
  28. }
  29. }
В общем. В этом коде у меня происходит перемещение стрелками по некоторым элементам. Происходит перемещение тем, что у алмазиков появляется более толстый контур, если он есть, значит алмазик выделен, а контур рисует Draw_Outline, удаляет контур Delete_Outline, а Delete_All_Outline удаляет все контуры. Проблема в том, что после того как я добавил "case 13" оно стало неправильно работать, хотя без него всё было идеально. Как такое может быть? Нажимаю кнопку вниз, а срабатывает кейс с кнопкой Enter, который удаляет алмазики. Еще у меня есть проблема в том, что при помощи outtextxy текст выводится на черном фоне, можно ли как-то сделать, чтобы он выводился с тем фоном, который в графическом окне? Весь код программы:
Листинг программы
  1. #include <conio.h>
  2. #include <ctime>
  3. #include <graphics.h>
  4. #include <cstdlib>
  5. int f=0;
  6. void Draw_Menu ()
  7. {
  8. setfillstyle(1,COLOR(245,245,220));
  9. bar(0,0,1000,600);
  10. setcolor(COLOR(220,220,125));
  11. line(210,0,200,10);
  12. line(210,20,200,30);
  13. line(590,0,600,10);
  14. line(590,20,600,30);
  15. line(200,590,210,600);
  16. line(200,570,210,580);
  17. line(590,600,600,590);
  18. line(590,580,600,570);
  19. line(800,0,800,600); // âåðòèêГ*ëüГ*Г*Гї ëèГ*ГЁГї ìåæäó ìåГ*Гѕ ГЁ èãðîâûì ïîëåì
  20. line(10,10,200,10); // âåðõГ*ГїГї ëåâГ*Гї ëèГ*ГЁГї ïîëÿ
  21. line(600,10,790,10); // âåðõГ*ГїГї ГЇГ°Г*ГўГ*Гї ëèГ*ГЁГї ïîëÿ
  22. line(10,590,200,590); // Г*ГЁГ¦Г*ГїГї ëåâГ*Гї ëèГ*ГЁГї ïîëÿ
  23. line(600,590,790,590); // Г*ГЁГ¦Г*ГїГї ГЇГ°Г*ГўГ*Гї ëèГ*ГЁГї ïîëÿ
  24. line(10,10,10,590); // ëåâГ*Гї ëèГ*ГЁГї ïîëÿ
  25. line(790,10,790,590); // ГЇГ°Г*ГўГ*Гї ëèГ*ГЁГї ïîëÿ
  26. line(0,0,10,10); // óãîëîê ëåâî-âåðõ
  27. line(0,600,10,590); // óãîëîê ëåâî-Г*ГЁГ§
  28. line(800,0,790,10); // óãîëîê ГЇГ°Г*ГўГ®-âåðõ
  29. line(800,600,790,590); // óãîëîê ГЇГ°Г*ГўГ®-Г*ГЁГ§
  30. line(200,10,200,30); // âåðõГ*ГїГї ëåâГ*Гї ëèГ*ГЁГї îêîøêГ*
  31. line(600,10,600,30); // âåðõГ*ГїГї ГЇГ°Г*ГўГ*Гї ëèГ*ГЁГї îêîøêГ*
  32. line(200,30,600,30); // âåðõГ*ГїГї Г*ГЁГ¦Г*ГїГї ëèГ*ГЁГї îêîøêГ*
  33. line(210,20,590,20); // âåðõГ*ГїГї âåðõГ*ГїГї ëèГ*ГЁГї îêîøêГ*
  34. line(210,0,210,20); // âåðõГ*ГїГї ëåâГ*Гї Г°Г*ìêГ* îêîøêГ*
  35. line(590,0,590,20); // âåðõГ*ГїГї ГЇГ°Г*ГўГ*Гї Г°Г*ìêГ* îêîøêГ*
  36. line(200,590,200,570); // Г*ГЁГ¦Г*ГїГї ëåâГ*Гї ëèГ*ГЁГї îêîøêГ*
  37. line(600,590,600,570); // Г*ГЁГ¦Г*ГїГї ГЇГ°Г*ГўГ*Гї ëèГ*ГЁГї îêîøêГ*
  38. line(210,580,590,580); // Г*ГЁГ¦Г*ГїГї âåðõГ*ГїГї ëèГ*ГЁГї îêîøêГ*
  39. line(200,570,600,570); // Г*ГЁГ¦Г*ГїГї Г*ГЁГ¦Г*ГїГї ëèГ*ГЁГї îêîøêГ*
  40. line(210,600,210,580); // Г*ГЁГ¦Г*ГїГї ëåâГ*Гї Г°Г*ìêГ* îêîøêГ*
  41. line(590,600,590,580); // Г*ГЁГ¦Г*ГїГї ГЇГ°Г*ГўГ*Гї Г°Г*ìêГ* îêîøêГ*
  42. int x=0, y=0;
  43. for (int i=0; i<7; i++)
  44. { // ðèñóåì ГЊГҐГ*Гѕ
  45. if (i<2||i==3||i>4) {
  46. line(810,y+11,990,y+11);
  47. line(810,y+85,990,y+85);
  48. line(820,y+21,980,y+21);
  49. line(820,y+85,980,y+85);
  50. line(810,y+11,810,y+85);
  51. line(990,y+11,990,y+85);
  52. line(820,y+21,820,y+75);
  53. line(980,y+21,980,y+75);
  54. line(820,y+75,980,y+75);
  55. setfillstyle(1,COLOR(250,250,235));
  56. floodfill(x+825,y+30,COLOR(220,220,125));
  57. setfillstyle(1,COLOR(240,240,200));
  58. floodfill(x+815,y+16,COLOR(220,220,125));}
  59. y+=84;
  60. }
  61. for (int i=0; i<2; i++)
  62. { // ðèñóåì ×åëîâåê è Êîìïüþòåð
  63. line(x+810,179,x+895,179);
  64. line(x+820,189,x+885,189);
  65. line(x+810,253,x+895,253);
  66. line(x+820,243,x+885,243);
  67. line(x+810,179,x+810,253);
  68. line(x+895,179,x+895,253);
  69. line(x+820,189,x+820,243);
  70. line(x+885,189,x+885,243);
  71. setfillstyle(1,COLOR(250,250,235));
  72. floodfill(x+830,190,COLOR(220,220,125));
  73. setfillstyle(1,COLOR(240,240,200));
  74. floodfill(x+815,180,COLOR(220,220,125));
  75. x+=95;
  76. }
  77. x=0; y=0;
  78. for (int i=0; i<6; i++)
  79. { // ðèñóåì Êîë-ГўГ® Г*ëìГ*çîâ
  80. line(x+810,y+347,x+864,y+347);
  81. line(x+815,y+352,x+859,y+352);
  82. line(x+810,y+379,x+864,y+379);
  83. line(x+815,y+374,x+859,y+374);
  84. line(x+810,y+347,x+810,y+379);
  85. line(x+815,y+352,x+815,y+374);
  86. line(x+864,y+347,x+864,y+379);
  87. line(x+859,y+352,x+859,y+374);
  88. setfillstyle(1,COLOR(250,250,235));
  89. floodfill(x+816,y+353,COLOR(220,220,125));
  90. setfillstyle(1,COLOR(240,240,200));
  91. floodfill(x+812,y+350,COLOR(220,220,125));
  92. if (i+1==1||i+1==3||i+1==5) y+=42;
  93. else {x+=63; y-=42;}
  94. }
  95. setfillstyle(1,COLOR(250,250,235));
  96. floodfill (400,5,COLOR(220,220,125));
  97. floodfill (400,595,COLOR(220,220,125));
  98. floodfill(15,15,COLOR(220,220,125));
  99. setfillstyle(1,COLOR(240,240,200));
  100. floodfill(5,10,COLOR(220,220,125));
  101. floodfill(795,10,COLOR(220,220,125));
  102. floodfill(10,595,COLOR(220,220,125));
  103. floodfill(205,10,COLOR(220,220,125));
  104. floodfill(400,25,COLOR(220,220,125));
  105. floodfill(400,575,COLOR(220,220,125));
  106. floodfill(595,10,COLOR(220,220,125));
  107. floodfill(610,5,COLOR(220,220,125));
  108. floodfill(610,595,COLOR(220,220,125));
  109. floodfill(205,590,COLOR(220,220,125));
  110. floodfill(595,590,COLOR(220,220,125));
  111. floodfill(10,5,COLOR(220,220,125));
  112. outtextxy(850,40, "Г€ Гѓ Гђ ГЂ ГЌ Г€ ГЊ");
  113. outtextxy(850,115, "ГЉ Г’ ГЋ ГЃ Г“ Г„ Г… Г’");
  114. outtextxy(830,135, "Г‘ ГЋ ГЏ Г… Гђ ГЌ Г€ ГЉ ГЋ ГЊ ?");
  115. outtextxy(825,208, "×åëîâåê");
  116. outtextxy(930,208, "Êîìï");
  117. outtextxy(843,283, "ÑÊÎËÜÊÎ ÊÓ×ÅÊ");
  118. outtextxy(850,307, "Ñ ÀËÌÀÇÀÌÈ?");
  119. outtextxy(834,355, "1");
  120. outtextxy(897,355, "2");
  121. outtextxy(960,355, "3");
  122. outtextxy(834,398, "4");
  123. outtextxy(897,398, "5");
  124. outtextxy(960,398, "6");
  125. outtextxy(867,460, "ГЌ ГЂ Г— ГЂ Г’ Гњ");
  126. outtextxy(869,545, "Г‚ Г› Г• ГЋ Г„");
  127. }
  128. int Who_Player ()
  129. {
  130. int x=815, y=250, code;
  131. setfillstyle (1, COLOR(225,225,140));
  132. floodfill (x,y,COLOR(220,220,125));
  133. setfillstyle(1,COLOR(240,240,200));
  134. floodfill (x+96,y,COLOR(220,220,125));
  135. while (1)
  136. {
  137. code = getch();
  138. switch (code)
  139. {
  140. case 75: if (x!=911) {setfillstyle(1,COLOR(240,240,200)); floodfill (x,y,COLOR(220,220,125)); x+=96; setfillstyle (1, COLOR(225,225,140)); floodfill (x,y,COLOR(220,220,125)); break;} // âëåâî
  141. else {setfillstyle(1,COLOR(240,240,200)); floodfill (x,y,COLOR(220,220,125)); x=815; setfillstyle (1, COLOR(225,225,140)); floodfill (x,y,COLOR(220,220,125)); break;}
  142. case 77: if (x!=815) {setfillstyle(1,COLOR(240,240,200)); floodfill (x,y,COLOR(220,220,125)); x-=96; setfillstyle (1, COLOR(225,225,140)); floodfill (x,y,COLOR(220,220,125)); break;} // ГўГЇГ°Г*ГўГ®
  143. else {setfillstyle(1,COLOR(240,240,200)); floodfill (x,y,COLOR(220,220,125)); x=911; setfillstyle (1, COLOR(225,225,140)); floodfill (x,y,COLOR(220,220,125)); break;}
  144. case 13: switch(x) // Enter
  145. {
  146. case 815: setfillstyle(1,COLOR(200,170,60)); floodfill (x,y,COLOR(220,220,125)); return 1;
  147. case 911: setfillstyle(1,COLOR(200,170,60)); floodfill (x,y,COLOR(220,220,125)); return 2;
  148. }
  149. }
  150. }
  151. }
  152. int How_Many_Diamonds ()
  153. {
  154. int x=811, y=348, code;
  155. setfillstyle (1, COLOR(225,225,140));
  156. floodfill (x,y,COLOR(220,220,125));
  157. while (1)
  158. {
  159. code = getch();
  160. switch (code)
  161. {
  162. case 77: if (x!=937) {setfillstyle(1,COLOR(240,240,200)); floodfill (x,y,COLOR(220,220,125)); x+=63; setfillstyle (1, COLOR(225,225,140)); floodfill (x,y,COLOR(220,220,125)); break;} // ГўГЇГ°Г*ГўГ®
  163. else {setfillstyle(1,COLOR(240,240,200)); floodfill (x,y,COLOR(220,220,125)); x=811; setfillstyle (1, COLOR(225,225,140)); floodfill (x,y,COLOR(220,220,125)); break;}
  164. case 75: if (x!=811) {setfillstyle(1,COLOR(240,240,200)); floodfill (x,y,COLOR(220,220,125)); x-=63; setfillstyle (1, COLOR(225,225,140)); floodfill (x,y,COLOR(220,220,125)); break;} // âëåâî
  165. else {setfillstyle(1,COLOR(240,240,200)); floodfill (x,y,COLOR(220,220,125)); x=937; setfillstyle (1, COLOR(225,225,140)); floodfill (x,y,COLOR(220,220,125)); break;}
  166. case 72: if (y!=348) {setfillstyle(1,COLOR(240,240,200)); floodfill (x,y,COLOR(220,220,125)); y-=42; setfillstyle (1, COLOR(225,225,140)); floodfill (x,y,COLOR(220,220,125)); break;} // ââåðõ
  167. else {setfillstyle(1,COLOR(240,240,200)); floodfill (x,y,COLOR(220,220,125)); y=390; setfillstyle (1, COLOR(225,225,140)); floodfill (x,y,COLOR(220,220,125)); break;}
  168. case 80: if (y!=390) {setfillstyle(1,COLOR(240,240,200)); floodfill (x,y,COLOR(220,220,125)); y+=42; setfillstyle (1, COLOR(225,225,140)); floodfill (x,y,COLOR(220,220,125)); break;} // ГўГ*ГЁГ§
  169. else {setfillstyle(1,COLOR(240,240,200)); floodfill (x,y,COLOR(220,220,125)); y=348; setfillstyle (1, COLOR(225,225,140)); floodfill (x,y,COLOR(220,220,125)); break;}
  170. case 13: switch(x) // Enter
  171. {
  172. case 811: if (y==348) {setfillstyle(1,COLOR(200,170,60)); floodfill (x,y,COLOR(220,220,125)); return 1;}
  173. else {setfillstyle(1,COLOR(200,170,60)); floodfill (x,y,COLOR(220,220,125)); return 4;}
  174. case 874: if (y==348) {setfillstyle(1,COLOR(200,170,60)); floodfill (x,y,COLOR(220,220,125)); return 2;}
  175. else {setfillstyle(1,COLOR(200,170,60)); floodfill (x,y,COLOR(220,220,125)); return 5;}
  176. case 937: if (y==348) {setfillstyle(1,COLOR(200,170,60)); floodfill (x,y,COLOR(220,220,125)); return 3;}
  177. else {setfillstyle(1,COLOR(200,170,60)); floodfill (x,y,COLOR(220,220,125)); return 6;}
  178. }
  179. }
  180. }
  181. }

Решение задачи: «Switch не верно работает»

textual
Листинг программы
  1. case 80: // вниз
  2.      if (getpixel(85,y+80)!=getpixel(85,610)&&getpixel(85,y+50)!=getpixel(85,50))
  3.            {
  4.               Delete_All_Outline(y,count);
  5.               x=85;
  6.               y+=80;
  7.               count=1;
  8.               setcolor(0);
  9.               Draw_Outline(y,count);
  10.                break;
  11.                  }
  12.                  else
  13.                {
  14.                  int j=y;
  15.                    if (j!=530)
  16.                       while (j!=530)
  17.                          {
  18.                           j+=80;
  19.                             if (getpixel(85,j)!=getpixel(20,20))
  20.                             {
  21.                              Delete_All_Outline(y,count);
  22.                               x=85;
  23.                               y=j;
  24.                               count=1;
  25.                               setcolor(0);
  26.                               Draw_Outline(y,count);
  27.                                break;
  28.                              }
  29.                             break;
  30.                            }
  31.                       }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут