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

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

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

Здравствуйте! Столкнулся с одной неприятной штукой. Код у меня может быть немного переполненным лишним и поэтому в нем не сразу разберешься, но, пожалуйста, помогите
void Play (int Diamonds)
{
    int random=rand()%2+1; // рандомный выбор игрока
    if (random==1) outtextxy(310,10,"ХОД ПЕРВОГО ИГРОКА");
    else outtextxy(310,10,"ХОД ВТОРОГО ИГРОКА");
    int x=85, y=130, code, count=1;
    setcolor(0); 
    Draw_Outline(y,count);
    while (1)
    {
          code = getch();
          switch (code)
                 {
                       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;} // вправо
                       else break;
                       case 75: if (getpixel(x,y)==getpixel(x-80,y)) {x-=80; Delete_Outline(y, count); count--; break;} // влево
                       else break;
                       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;} // вверх
                       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;}}
                       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;} // вниз
                       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;}}
                       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
                       if (Diamonds!=1) {Delete_All_Outline(y,count); Delete_Diamonds(x,y,count); if (getpixel(85,y)==getpixel(20,20)) Diamonds--;} 
                       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,"ВЫБЕРИТЕ ДРУГОЕ КОЛИЧЕСТВО АЛМАЗОВ!");}
                       else if (count==1&&N==1) {Victory(random); return;} else {Delete_All_Outline(y,count); Delete_Diamonds(x,y,count);}}
                       x=85; y=130; while(getpixel(85,y)==getpixel(20,20)) y+=80; count=1; setcolor(0); Draw_Outline(y,count); break;
                 }
    }
}
В общем. В этом коде у меня происходит перемещение стрелками по некоторым элементам. Происходит перемещение тем, что у алмазиков появляется более толстый контур, если он есть, значит алмазик выделен, а контур рисует Draw_Outline, удаляет контур Delete_Outline, а Delete_All_Outline удаляет все контуры. Проблема в том, что после того как я добавил "case 13" оно стало неправильно работать, хотя без него всё было идеально. Как такое может быть? Нажимаю кнопку вниз, а срабатывает кейс с кнопкой Enter, который удаляет алмазики. Еще у меня есть проблема в том, что при помощи outtextxy текст выводится на черном фоне, можно ли как-то сделать, чтобы он выводился с тем фоном, который в графическом окне? Весь код программы:
#include <conio.h>
#include <ctime>
#include <graphics.h>
#include <cstdlib>
int f=0;
void Draw_Menu ()
{
     setfillstyle(1,COLOR(245,245,220));
     bar(0,0,1000,600);
     setcolor(COLOR(220,220,125));
     line(210,0,200,10);
     line(210,20,200,30);
     line(590,0,600,10);
     line(590,20,600,30);
     line(200,590,210,600);
     line(200,570,210,580);
     line(590,600,600,590);
     line(590,580,600,570);
     line(800,0,800,600); // âåðòèêГ*ëüГ*Г*Гї ëèГ*ГЁГї ìåæäó ìåГ*Гѕ ГЁ èãðîâûì ïîëåì
     line(10,10,200,10); // âåðõГ*ГїГї ëåâГ*Гї ëèГ*ГЁГї ïîëÿ
     line(600,10,790,10); // âåðõГ*ГїГї ГЇГ°Г*ГўГ*Гї ëèГ*ГЁГї ïîëÿ
     line(10,590,200,590); // Г*ГЁГ¦Г*ГїГї ëåâГ*Гї ëèГ*ГЁГї ïîëÿ
     line(600,590,790,590); // Г*ГЁГ¦Г*ГїГї ГЇГ°Г*ГўГ*Гї ëèГ*ГЁГї ïîëÿ
     line(10,10,10,590); // ëåâГ*Гї ëèГ*ГЁГї ïîëÿ
     line(790,10,790,590); // ГЇГ°Г*ГўГ*Гї ëèГ*ГЁГї ïîëÿ
     line(0,0,10,10); // óãîëîê ëåâî-âåðõ
     line(0,600,10,590); // óãîëîê ëåâî-Г*ГЁГ§
     line(800,0,790,10); // óãîëîê ГЇГ°Г*ГўГ®-âåðõ
     line(800,600,790,590); // óãîëîê ГЇГ°Г*ГўГ®-Г*ГЁГ§
     line(200,10,200,30); // âåðõГ*ГїГї ëåâГ*Гї ëèГ*ГЁГї îêîøêГ*
     line(600,10,600,30); // âåðõГ*ГїГї ГЇГ°Г*ГўГ*Гї ëèГ*ГЁГї îêîøêГ*
     line(200,30,600,30); // âåðõГ*ГїГї Г*ГЁГ¦Г*ГїГї ëèГ*ГЁГї îêîøêГ*
     line(210,20,590,20); // âåðõГ*ГїГї âåðõГ*ГїГї ëèГ*ГЁГї îêîøêГ*
     line(210,0,210,20); // âåðõГ*ГїГї ëåâГ*Гї Г°Г*ìêГ* îêîøêГ*
     line(590,0,590,20); // âåðõГ*ГїГї ГЇГ°Г*ГўГ*Гї Г°Г*ìêГ* îêîøêГ*
     line(200,590,200,570); // Г*ГЁГ¦Г*ГїГї ëåâГ*Гї ëèГ*ГЁГї îêîøêГ*
     line(600,590,600,570); // Г*ГЁГ¦Г*ГїГї ГЇГ°Г*ГўГ*Гї ëèГ*ГЁГї îêîøêГ*
     line(210,580,590,580); // Г*ГЁГ¦Г*ГїГї âåðõГ*ГїГї ëèГ*ГЁГї îêîøêГ*
     line(200,570,600,570); // Г*ГЁГ¦Г*ГїГї Г*ГЁГ¦Г*ГїГї ëèГ*ГЁГї îêîøêГ*
     line(210,600,210,580); // Г*ГЁГ¦Г*ГїГї ëåâГ*Гї Г°Г*ìêГ* îêîøêГ*
     line(590,600,590,580); // Г*ГЁГ¦Г*ГїГї ГЇГ°Г*ГўГ*Гї Г°Г*ìêГ* îêîøêГ*
     int x=0, y=0;
     for (int i=0; i<7; i++)
     { // ðèñóåì ГЊГҐГ*Гѕ
         if (i<2||i==3||i>4) {
         line(810,y+11,990,y+11); 
         line(810,y+85,990,y+85);
         line(820,y+21,980,y+21);
         line(820,y+85,980,y+85);
         line(810,y+11,810,y+85);
         line(990,y+11,990,y+85);
         line(820,y+21,820,y+75);
         line(980,y+21,980,y+75);
         line(820,y+75,980,y+75); 
         setfillstyle(1,COLOR(250,250,235));
         floodfill(x+825,y+30,COLOR(220,220,125));
         setfillstyle(1,COLOR(240,240,200));
         floodfill(x+815,y+16,COLOR(220,220,125));}
         y+=84;   
     }
     for (int i=0; i<2; i++)
     { // ðèñóåì ×åëîâåê è Êîìïüþòåð
         line(x+810,179,x+895,179);
         line(x+820,189,x+885,189);
         line(x+810,253,x+895,253);
         line(x+820,243,x+885,243);
         line(x+810,179,x+810,253);
         line(x+895,179,x+895,253);
         line(x+820,189,x+820,243);
         line(x+885,189,x+885,243);
         setfillstyle(1,COLOR(250,250,235));
         floodfill(x+830,190,COLOR(220,220,125));
         setfillstyle(1,COLOR(240,240,200));
         floodfill(x+815,180,COLOR(220,220,125));
         x+=95;
     }
     x=0; y=0;
     for (int i=0; i<6; i++)
     { // ðèñóåì Êîë-ГўГ® Г*ëìГ*çîâ
         line(x+810,y+347,x+864,y+347);
         line(x+815,y+352,x+859,y+352);
         line(x+810,y+379,x+864,y+379);
         line(x+815,y+374,x+859,y+374);
         line(x+810,y+347,x+810,y+379);
         line(x+815,y+352,x+815,y+374);
         line(x+864,y+347,x+864,y+379);
         line(x+859,y+352,x+859,y+374);
         setfillstyle(1,COLOR(250,250,235));
         floodfill(x+816,y+353,COLOR(220,220,125));
         setfillstyle(1,COLOR(240,240,200));
         floodfill(x+812,y+350,COLOR(220,220,125));
         if (i+1==1||i+1==3||i+1==5)  y+=42;
         else {x+=63; y-=42;}
     }
     setfillstyle(1,COLOR(250,250,235));
     floodfill (400,5,COLOR(220,220,125));
     floodfill (400,595,COLOR(220,220,125));
     floodfill(15,15,COLOR(220,220,125));
     setfillstyle(1,COLOR(240,240,200));
     floodfill(5,10,COLOR(220,220,125));
     floodfill(795,10,COLOR(220,220,125));
     floodfill(10,595,COLOR(220,220,125));
     floodfill(205,10,COLOR(220,220,125)); 
     floodfill(400,25,COLOR(220,220,125));
     floodfill(400,575,COLOR(220,220,125));
     floodfill(595,10,COLOR(220,220,125)); 
     floodfill(610,5,COLOR(220,220,125));
     floodfill(610,595,COLOR(220,220,125));
     floodfill(205,590,COLOR(220,220,125));
     floodfill(595,590,COLOR(220,220,125));
     floodfill(10,5,COLOR(220,220,125));
     outtextxy(850,40, "Г€ Гѓ Гђ ГЂ   ГЌ Г€ ГЊ");
     outtextxy(850,115, "ГЉ Г’ ГЋ   ГЃ Г“ Г„ Г… Г’");
     outtextxy(830,135, "Г‘ ГЋ ГЏ Г… Гђ ГЌ Г€ ГЉ ГЋ ГЊ ?");
     outtextxy(825,208, "×åëîâåê");
     outtextxy(930,208, "Êîìï");
     outtextxy(843,283, "ÑÊÎËÜÊÎ ÊÓ×ÅÊ");
     outtextxy(850,307, "Ñ ÀËÌÀÇÀÌÈ?");
     outtextxy(834,355, "1");
     outtextxy(897,355, "2");
     outtextxy(960,355, "3");
     outtextxy(834,398, "4");
     outtextxy(897,398, "5");
     outtextxy(960,398, "6");
     outtextxy(867,460, "ГЌ ГЂ Г— ГЂ Г’ Гњ");
     outtextxy(869,545, "Г‚ Г› Г• ГЋ Г„");
}
int Who_Player ()
{
    int x=815, y=250, code;
    setfillstyle (1, COLOR(225,225,140)); 
    floodfill (x,y,COLOR(220,220,125));
    setfillstyle(1,COLOR(240,240,200));
    floodfill (x+96,y,COLOR(220,220,125));
    while (1)
    {
          code = getch();
          switch (code)
                 {
                       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;} // âëåâî
                       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;}
                       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;} // ГўГЇГ°Г*ГўГ®
                       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;}
                       case 13: switch(x)  // Enter
                                    {
                                         case 815: setfillstyle(1,COLOR(200,170,60)); floodfill (x,y,COLOR(220,220,125)); return 1;
                                         case 911: setfillstyle(1,COLOR(200,170,60)); floodfill (x,y,COLOR(220,220,125)); return 2;
                                    }
                 }
    }
}
int How_Many_Diamonds ()
{
    int x=811, y=348, code;
    setfillstyle (1, COLOR(225,225,140)); 
    floodfill (x,y,COLOR(220,220,125));
    while (1)
    {
          code = getch();
          switch (code)
                 {
                       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;} // ГўГЇГ°Г*ГўГ®
                       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;}
                       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;} // âëåâî
                       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;}
                       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;} // ââåðõ
                       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;} 
                       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;} // ГўГ*ГЁГ§
                       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;}
                       case 13: switch(x)  // Enter
                                    {
                                         case 811: if (y==348) {setfillstyle(1,COLOR(200,170,60)); floodfill (x,y,COLOR(220,220,125)); return 1;}
                                         else {setfillstyle(1,COLOR(200,170,60)); floodfill (x,y,COLOR(220,220,125)); return 4;}
                                         case 874: if (y==348) {setfillstyle(1,COLOR(200,170,60)); floodfill (x,y,COLOR(220,220,125)); return 2;}
                                         else {setfillstyle(1,COLOR(200,170,60)); floodfill (x,y,COLOR(220,220,125)); return 5;}
                                         case 937: if (y==348) {setfillstyle(1,COLOR(200,170,60)); floodfill (x,y,COLOR(220,220,125)); return 3;}
                                         else {setfillstyle(1,COLOR(200,170,60)); floodfill (x,y,COLOR(220,220,125)); return 6;}
                                    }
                 }
    }
}

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

textual
Листинг программы
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;
                 } 
                 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;
                           }
                      }

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


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

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

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