Switch не верно работает - C (СИ)
Формулировка задачи:
Здравствуйте! Столкнулся с одной неприятной штукой. Код у меня может быть немного переполненным лишним и поэтому в нем не сразу разберешься, но, пожалуйста, помогите
В общем. В этом коде у меня происходит перемещение стрелками по некоторым элементам. Происходит перемещение тем, что у алмазиков появляется более толстый контур, если он есть, значит алмазик выделен, а контур рисует Draw_Outline, удаляет контур Delete_Outline, а Delete_All_Outline удаляет все контуры.
Проблема в том, что после того как я добавил "case 13" оно стало неправильно работать, хотя без него всё было идеально. Как такое может быть? Нажимаю кнопку вниз, а срабатывает кейс с кнопкой Enter, который удаляет алмазики.
Еще у меня есть проблема в том, что при помощи outtextxy текст выводится на черном фоне, можно ли как-то сделать, чтобы он выводился с тем фоном, который в графическом окне?
Весь код программы:
Листинг программы
- 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;
- }
- }
- }
Листинг программы
- #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;
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д