![]() |
![]() |
Олежечег(быв. Олежик) |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Всем привет...
В институте курсовой работой будет игра. Я предложил свой варант игры....и преподы дали мне согласие. Игра будет реализовывать перемещение мячиков( 3 штуки ) по доске 3х3..( т.е. 9 сегментов )..... ОПИСАНИЕ. 1.на поле 3х3 расположены 3 шарика разного цвета.... - СИНИЙ - КРАСНЫЙ - ЗЕЛЁНЫЙ 2.на поле 3х3 есть 3 сегмента разного цвета... - СИНИЙ - КРАСНЫЙ - ЗЕЛЁНЫЙ 3. КРАСНЫЙ шарик расположен на ЗЁЛЁНОМ сегменте..... СИНИЙ шарик расположен на СИНЕМ сегменте(т.е. на своём месте он находится)............ ЗЕЛЁНЫЙ шарик расположен на КРАСНОМ сегменте......... 3.Их месторасположение вы увидите на картинках, скачав предварительно АРХИВ с этими картинками..... ![]() ( В архиве содержатся 6 картинок, последовательностью от 1 до 6 ) 4.Представьте, что это как доска, которую вы держите в руках....и при наклоне ВПЕРЁД( а на экране вверх ) перемещаются все шарики ВПЕРЁД( Если , конечно, перед этим шариком нет препятствия )... 5.На поле расположены несколько стенок, через которые шарики перекатиться не могут ЗАДАЧА ( В чём же заключается победа игры) Надо, путём совместного передвигания шариков, поставить каждый шарик на свой сегмент.... Хотелось бы услышать ваши предложения...... А сделать я бы хотел её совместно с вами.... Меню хотелось бы найти на вашем форуме (ЕДИНСТВЕННЫЙ МИНУС....модуль ГРАФ будем тока проходить в инсте в этот понедельник, поэтому особо незнаю, как там что =) ) Сообщение отредактировано: Олежечег(быв. Олежик) - 15.04.2007 18:08 |
![]() ![]() |
Олежечег(быв. Олежик) |
![]() ![]()
Сообщение
#2
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
народ.
Будет ли лучше.. если я сделаю масив 3х3? т.к. я посмотрел..и подумал, что лучше будет, если просто на экране... после того как нарисую 9 квадратиков..буду просто перемещать свои шарики... Допустим... У меня для каждого шарика есть своё значение...mestox1,mestoу1 ..mestox2,mestoy2...mestoх3,mestoу3... Значения будут const.... и...я ставлю перед всем этим while , который будет сравнивать эти значения через каждый ход, совершённый пользователем. ДО ТЕХ ПОР ПОКА mestox1<>х1 and........и так далее...... Можете помочь с проверкой месторасположением шариков!!!! |
Lapp |
![]()
Сообщение
#3
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
народ. Будет ли лучше.. если я сделаю масив 3х3? т.к. я посмотрел..и подумал, что лучше будет, если просто на экране... Массив (доску, 3х3) завести надо, имхо. Ты подошел с другого конца. У тебя есть массив (на самом деле - не совсем массив, и это еще хуже..) шариков, каждый элемент его - две координаты. Такой подход имеет право на жизнь, конечно, но подумай вот, о чем.. Когда ты ты перемещаешь шарик на новую клетку, тебе нужно проверить, не занята ли она. Для этого в твоей реализации нужно пройтись по всему массиву шариков и проверить их позиции. В схеме с массивом доски нужно проверить всего одно поле - клетку доски. Далее, тебе вообще не потребуется никаких специальных координат - их роль будут с успехом выполнять индексы массива. Массив этот должен содержать всего одно число - номер шарика, находящегося в этой клетке, либо ноль, если она пустая. Далее, тебе надо задать цвет клеток на доске - это тоже желательно делать в массиве доски, 3х3 (добавляется еще один элемент, то есть желательно делать array [1..3,1..3] of record Еще один совет: не замешивай сразу с графикой.. Сделай основной модуль, который двигает шары в соответствии с правилами игры. В нем используй процедуру ShowDesk, которая сначала может быть просто пустой, или ты в ней можешь просто в тексте распечатать матрицу, при этом цвет клетки и шара указывать номером или делать цвет цифры и фона соответствующими. Потом эту процедуру сделаешь в графике. Добавлено через 1 мин. А проверку на выигрыш сделать очень просто: проходишь по всей доске (двойной цикл по клеткам) и проверяешь на равенство Shar=Color -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Олежечег(быв. Олежик) |
![]()
Сообщение
#4
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
а по какому критерию лучше выискивать лидера в таблице рекордов....
????? Задать время......или сказать, сколько он потратил ходов? Как это реализовать? |
Гость |
![]()
Сообщение
#5
|
Гость ![]() |
Задать время......или сказать, сколько он потратил ходов? Как это реализовать? И то и другое неплохо. Сам выбирай. Реализовать - время берешь с помощью GetTime. А ходы считать как - сам думай ![]() Я вижу еще одну трудность. Не совсем понимаю, как задавать стенки между клетками.. Думаю, надо добавить в запись для клетки еще два поля - скажем, Left и Up. Наличие 1 в них будет означать стенку, а 0 - нет стенки. |
Lapp |
![]()
Сообщение
#6
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Предыдущий пост - мой.
Кстати, на всякий случай: процедура GetTime - в модуле DOS -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Олежечег(быв. Олежик) |
![]()
Сообщение
#7
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Вот....
уря...сделал менюшку... но вот проблема..... Мне сказали ей переделать в динамическое меню.... Подскажите как? Код Program Menu; uses crt, graph; type TMenu=record name:string; active:boolean; end; const max=4; var driver,mode:integer; MenuList:array[1..max] of TMenu; i:integer; x,y:integer; key:char; keyt:byte; act,nact,pact:byte; exit:boolean; Procedure DrawButton(name:string;active:boolean;x,y:integer); var h,w:integer; tc,bc:integer; begin SetTextJustify(CenterText, CenterText); h:=TextWidth(name); w:=TextHeight(name); tc:=4; bc:=15; if active then begin SetFillStyle(1,0); Bar(x+40,y+40,x+h+20,y+w+20); SetFillStyle(1,bc); Bar(x,y,x+h+40,y+w+40); SetColor(tc); Rectangle(x,y,x+h+40,y+w+40); OutTextXY(x+(h div 2)+20,y+(w div 2)+20,name); end else begin SetFillStyle(1,0); Bar(x+40,y+40,x+h+20,y+w+20); SetFillStyle(1,tc); Bar(x,y,x+h+40,y+w+40); SetColor(bc); Rectangle(x,y,x+h+40,y+w+40); OutTextXY(x+(h div 2)+20,y+(w div 2)+20,name); end; end; BEGIN clrscr; driver:=vga; mode:=2; InitGraph(driver,mode,'C:\bp\BGI\'); { key:=readkey; keyt:=ord(key);} MenuList[1].name:='Game'; MenuList[1].active:=true; MenuList[2].name:='Records'; MenuList[2].active:=false; MenuList[3].name:='Options'; MenuList[3].active:=false; MenuList[4].name:='Exit'; MenuList[4].active:=false; act:=1; exit:=false; Repeat x:=250; y:=200; SetTextStyle(DefaultFont, HorizDir, 1); SetFillStyle(1,7); Bar(0,0,640,480); for i:=1 to max do begin DrawButton(MenuList[i].name,MenuList[i].active,x,y); y:=y+50; end; key:=readkey; if ord(key)=0 then key:=readkey; case ord(key) of 72: begin nact:=act-1; if nact=0 then nact:=4; MenuList[act].active:=not(MenuList[act].active); MenuList[nact].active:=not(MenuList[nact].active); if act>1 then act:=act-1 else act:=4; end; 80: begin nact:=act+1; if nact=5 then nact:=1; MenuList[act].active:=not(MenuList[act].active); MenuList[nact].active:=not(MenuList[nact].active); if act<4 then act:=act+1 else act:=1; end; 13: begin case act of 1: begin SetTextStyle(DefaultFont, HorizDir,2); DrawButton('‚лЎа Є®ЇЄ Game', true, 150, 300);{Введена клавиша ....} repeat until KeyPressed; end; 2: begin SetTextStyle(DefaultFont, HorizDir,2); DrawButton('‚лЎа Є®ЇЄ Records', true, 150, 300);{Введена клавиша ....} repeat until KeyPressed; end; 3: begin SetTextStyle(DefaultFont, HorizDir,2); DrawButton('‚лЎа Є®ЇЄ Options', true, 150, 300);{Введена клавиша ....} repeat until KeyPressed; end; 4: begin exit:=true; end; end; end; end; until exit; CloseGraph; END. |
Олежечег(быв. Олежик) |
![]()
Сообщение
#8
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Тут попробовал новую тему.....
Менюшку сделал... Слава богу!!! Динамическое!!! Так горд собой))) А насчёт своей игры....понапридумывал многое.. ))))))) ![]() Я хочу сделать вот так!!! Вы увидели массив.. заполненный 0-ми и 1-ми. Якобы...... Шарики могут двигаться тока по нечётным координатам.... [1,1][1,3][1,5][3,1][3,3][3,5][5,1][5,3][5,5] И..перед каждым шагом делаю проверку.. Таким образом я хочу показать стенки!!!!! Т.Е. Где стоят цифры 1, это стенки! Если на пути встречаются 2 последовательных нуля(0), то шарик двигается! В противном случае не происходит движение шарика. Вроде хорошо!!!! Как идейка? Или можно описать стенки по-лучше? |
Олежечег(быв. Олежик) |
![]() ![]()
Сообщение
#9
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
LAPP...
Посмотри пожалуйста.... Да и все.. посмотрите это пожалуйста.... )) Я сделал реализацию своей игры... Впринципе работает.. Но вот в чём глюк.. в некоторых моментах Шарик двигаться не хочет..... Или наоборот.. исчезает.. в основном исчезает на синей позиции....... Т.е. на синем квадратике.... Посмотрите пожалуйста........ Заранее скажу.. В процедуре драг...... На каждую клавишу ставлю проверку... Конечно длинная... но как смог.. Вот.. ))) ![]() Код Program shar; uses crt,graph; type PCircle = ^TCircle; Tcircle = object x,y,Radius,rradius : integer; color:byte; visible:boolean; Constructor Init(ix,iy:integer; iRadius:integer; icolor: byte); procedure Show;virtual; procedure hide; virtual; procedure drag(step:integer;ch:char); procedure MoveTo(xnew,ynew:integer); function isvisible:boolean; end; var driver,i,mode,y,x:integer; p1,p2,p3:pcircle; Ch,Q:char; procedure igrpole; begin setbkcolor(black); setcolor(darkgray); setfillstyle(solidfill,4); bar(120,6,276,162); setfillstyle(solidfill,15); bar(276,6,432,162); setfillstyle(solidfill,15); bar(432,6,588,162); setfillstyle(solidfill,1); bar(276,162,432,318); setfillstyle(solidfill,15); bar(120,162,276,318); setfillstyle(solidfill,15); bar(432,162,588,318); setfillstyle(solidfill,2); bar(432,318,588,474); setfillstyle(solidfill,15); bar(120,318,276,474); setfillstyle(solidfill,15); bar(276,318,432,474); for i:=157 to 167 do line(120,i,276,i); for i:=427 to 437 do line(i,6,i,162); for i:=313 to 323 do line(120,i,432,i); line(120,6,588,6); line(120,6,120,474); line(120,474,588,474); line(588,6,588,474); line(276,6,276,474); line(432,6,432,474); line(120,162,588,162); line(120,318,588,318); end; constructor Tcircle.init; begin x:=ix; y:=iy; radius:=iradius; color:=icolor; visible:=false; end; function Tcircle.IsVisible; begin IsVisible:=visible; end; procedure Tcircle.show; var tempcolor:byte; begin tempcolor:=getcolor; setcolor(color); setfillstyle(solidfill,color); fillellipse(x,y,radius,radius); visible:=true; setcolor(tempcolor); end; procedure Tcircle.Hide; var tempColor:byte; begin tempColor:=color; color:=getpixel(x+radius+5,y+radius+5); setfillstyle(solidfill,color); show; visible:=false; color:=TempColor; end; procedure Tcircle.Drag(Step:integer;ch:char); const centr1x=198; centr2x=354; centr3x=510; centr1y=84; centr2y=240; centr3y=396; begin Case Ord(Ch) of 72:if (x<>198) and (y<>84) and ((x<>354) or (y<>396)) and (((p1^.x<>centr2x) or (p1^.y<>centr1y)) or {Ќ з «® Їа®ўҐаЄЁ Єа б®Ј® Ё бЁҐЈ® и аЁЄ Ї®§ЁжЁЁ 354} ((p2^.x<>centr2x) or (p2^.y<>centr2y))) and (((p1^.x<>centr2x) or (p1^.y<>centr2y)) or ((p2^.x<>centr2x) or (p2^.y<>centr1y))) and {Љ®Ґж Їа®ўҐаЄЁ Єа б®Ј® Ё бЁҐЈ® и аЁЄ Ї®§ЁжЁЁ 354} (((p1^.x<>centr3x) or (p1^.y<>centr1y)) or {Ќ з «® Їа®ўҐаЄЁ Єа б®Ј® Ё бЁҐЈ® и аЁЄ Ї®§ЁжЁЁ 510} ((p2^.x<>centr3x) or (p2^.y<>centr2y))) and (((p1^.x<>centr3x) or (p1^.y<>centr2y)) or ((p2^.x<>centr3x) or (p2^.y<>centr1y))) and {Љ®Ґж Їа®ўҐаЄЁ Єа б®Ј® Ё бЁҐЈ® и аЁЄ Ї®§ЁжЁЁ 510} (((p1^.x<>centr2x) or (p1^.y<>centr1y)) or {Ќ з «® Їа®ўҐаЄЁ Єа б®Ј® Ё §Ґ«Ґ®Ј® и аЁЄ Ї®§ЁжЁЁ 354} ((p3^.x<>centr2x) or (p3^.y<>centr2y))) and (((p1^.x<>centr2x) or (p1^.y<>centr2y)) or ((p3^.x<>centr2x) or (p3^.y<>centr1y))) and {Љ®Ґж Їа®ўҐаЄЁ Єа б®Ј® Ё §Ґ«Ґ®Ј® и аЁЄ Ї®§ЁжЁЁ 354} (((p1^.x<>centr3x) or (p1^.y<>centr1y)) or {Ќ з «® Їа®ўҐаЄЁ Єа б®Ј® Ё §Ґ«Ґ®Ј® и аЁЄ Ї®§ЁжЁЁ 510} ((p3^.x<>centr3x) or (p3^.y<>centr2y))) and (((p1^.x<>centr3x) or (p1^.y<>centr2y)) or ((p3^.x<>centr3x) or (p3^.y<>centr1y))) and {Љ®Ґж Їа®ўҐаЄЁ Єа б®Ј® Ё §Ґ«Ґ®Ј® и аЁЄ Ї®§ЁжЁЁ 510} (((p3^.x<>centr2x) or (p3^.y<>centr1y)) or {Ќ з «® Їа®ўҐаЄЁ §Ґ«Ґ®Ј® Ё бЁҐЈ® и аЁЄ Ї®§ЁжЁЁ 354} ((p2^.x<>centr2x) or (p2^.y<>centr2y))) and (((p3^.x<>centr2x) or (p3^.y<>centr2y)) or ((p2^.x<>centr2x) or (p2^.y<>centr1y))) and {Љ®Ґж Їа®ўҐаЄЁ §Ґ«Ґ®Ј® Ё бЁҐЈ® и аЁЄ Ї®§ЁжЁЁ 354} (((p3^.x<>centr3x) or (p3^.y<>centr1y)) or {Ќ з «® Їа®ўҐаЄЁ §Ґ«Ґ®Ј® Ё бЁҐЈ® и аЁЄ Ї®§ЁжЁЁ 510} ((p2^.x<>centr3x) or (p2^.y<>centr2y))) and (((p3^.x<>centr3x) or (p3^.y<>centr2y)) or ((p2^.x<>centr3x) or (p2^.y<>centr1y))) then {Љ®Ґж Їа®ўҐаЄЁ §Ґ«Ґ®Ј® Ё бЁҐЈ® и аЁЄ Ї®§ЁжЁЁ 510} MoveTo(x, y-Step); {Up} 75:if (x<>198) and ((x<>510) or (y<>84)) and (((p1^.x<>centr1x) or (p1^.y<>centr1y)) or {na4alo proverki 2-h sharikov na pozicii 354} ((p2^.x<>centr2x) or (p2^.y<>centr1y))) and (((p1^.x<>centr2x) or (p1^.y<>centr1y)) or ((p2^.x<>centr1x) or (p2^.y<>centr1y))) and {konec proverki 2-h sharikov na pozicii 354} (((p1^.x<>centr1x) or (p1^.y<>centr2y)) or {na4alo proverki 2-h sharikov na pozicii 550} ((p2^.x<>centr2x) or (p2^.y<>centr2y))) and (((p1^.x<>centr2x) or (p1^.y<>centr2y)) or ((p2^.x<>centr1x) or (p2^.y<>centr2y))) and {konec proverki 2-h sharikov na pozicii 550} (((p1^.x<>centr1x) or (p1^.y<>centr3y)) or {na4alo proverki 2-h sharikov na pozicii 354} ((p2^.x<>centr2x) or (p2^.y<>centr3y))) and (((p1^.x<>centr2x) or (p1^.y<>centr3y)) or ((p2^.x<>centr1x) or (p2^.y<>centr3y))) and (((p1^.x<>centr1x) or (p1^.y<>centr1y)) or {na4alo proverki 2-h sharikov na pozicii 354} ((p3^.x<>centr2x) or (p3^.y<>centr1y))) and (((p1^.x<>centr2x) or (p1^.y<>centr1y)) or ((p3^.x<>centr1x) or (p3^.y<>centr1y))) and {konec proverki 2-h sharikov na pozicii 354} (((p1^.x<>centr1x) or (p1^.y<>centr2y)) or {na4alo proverki 2-h sharikov na pozicii 550} ((p3^.x<>centr2x) or (p3^.y<>centr2y))) and (((p1^.x<>centr2x) or (p1^.y<>centr2y)) or ((p3^.x<>centr1x) or (p3^.y<>centr2y))) and (((p1^.x<>centr1x) or (p1^.y<>centr3y)) or {na4alo proverki 2-h sharikov na pozicii 354} ((p3^.x<>centr2x) or (p2^.y<>centr3y))) and (((p1^.x<>centr2x) or (p1^.y<>centr3y)) or ((p3^.x<>centr1x) or (p2^.y<>centr3y))) and (((p3^.x<>centr1x) or (p3^.y<>centr1y)) or {na4alo proverki 2-h sharikov na pozicii 354} ((p2^.x<>centr2x) or (p2^.y<>centr1y))) and (((p3^.x<>centr2x) or (p3^.y<>centr1y)) or ((p2^.x<>centr1x) or (p2^.y<>centr1y))) and {konec proverki 2-h sharikov na pozicii 354} (((p3^.x<>centr1x) or (p3^.y<>centr2y)) or {na4alo proverki 2-h sharikov na pozicii 550} ((p2^.x<>centr2x) or (p2^.y<>centr2y))) and (((p3^.x<>centr2x) or (p3^.y<>centr2y)) or ((p2^.x<>centr1x) or (p2^.y<>centr2y))) and (((p3^.x<>centr1x) or (p1^.y<>centr3y)) or {na4alo proverki 2-h sharikov na pozicii 354} ((p2^.x<>centr2x) or (p2^.y<>centr3y))) and (((p3^.x<>centr2x) or (p1^.y<>centr3y)) or ((p2^.x<>centr1x) or (p2^.y<>centr3y))) then {konec proverki 2-h sharikov na pozicii 354} MoveTo(x-Step, y); {Left} 77:if (x<>510) and ((x<>354) or (y<>84)) and (((p1^.x<>centr1x) or (p1^.y<>centr1y)) or {na4alo proverki 2-h sharikov na pozicii 354} ((p2^.x<>centr2x) or (p2^.y<>centr1y))) and (((p1^.x<>centr2x) or (p1^.y<>centr1y)) or ((p2^.x<>centr1x) or (p2^.y<>centr1y))) and {konec proverki 2-h sharikov na pozicii 354} (((p1^.x<>centr3x) or (p1^.y<>centr2y)) or {na4alo proverki 2-h sharikov na pozicii 550} ((p2^.x<>centr2x) or (p2^.y<>centr2y))) and (((p1^.x<>centr2x) or (p1^.y<>centr2y)) or ((p2^.x<>centr3x) or (p2^.y<>centr2y))) and {konec proverki 2-h sharikov na pozicii 550} (((p1^.x<>centr3x) or (p1^.y<>centr3y)) or {na4alo proverki 2-h sharikov na pozicii 354} ((p2^.x<>centr2x) or (p2^.y<>centr3y))) and (((p1^.x<>centr2x) or (p1^.y<>centr3y)) or ((p2^.x<>centr3x) or (p2^.y<>centr3y))) and (((p1^.x<>centr1x) or (p1^.y<>centr1y)) or {na4alo proverki 2-h sharikov na pozicii 354} ((p3^.x<>centr2x) or (p3^.y<>centr1y))) and (((p1^.x<>centr2x) or (p1^.y<>centr1y)) or ((p3^.x<>centr1x) or (p3^.y<>centr1y))) and {konec proverki 2-h sharikov na pozicii 354} (((p1^.x<>centr3x) or (p1^.y<>centr2y)) or {na4alo proverki 2-h sharikov na pozicii 550} ((p3^.x<>centr2x) or (p3^.y<>centr2y))) and (((p1^.x<>centr2x) or (p1^.y<>centr2y)) or ((p3^.x<>centr3x) or (p3^.y<>centr2y))) and (((p1^.x<>centr3x) or (p1^.y<>centr3y)) or {na4alo proverki 2-h sharikov na pozicii 354} ((p3^.x<>centr2x) or (p2^.y<>centr3y))) and (((p1^.x<>centr2x) or (p1^.y<>centr3y)) or ((p3^.x<>centr3x) or (p2^.y<>centr3y))) and (((p3^.x<>centr1x) or (p3^.y<>centr1y)) or {na4alo proverki 2-h sharikov na pozicii 354} ((p2^.x<>centr2x) or (p2^.y<>centr1y))) and (((p3^.x<>centr2x) or (p3^.y<>centr1y)) or ((p2^.x<>centr1x) or (p2^.y<>centr1y))) and {konec proverki 2-h sharikov na pozicii 354} (((p3^.x<>centr3x) or (p3^.y<>centr2y)) or {na4alo proverki 2-h sharikov na pozicii 550} ((p2^.x<>centr2x) or (p2^.y<>centr2y))) and (((p3^.x<>centr2x) or (p3^.y<>centr2y)) or ((p2^.x<>centr3x) or (p2^.y<>centr2y))) and (((p3^.x<>centr3x) or (p1^.y<>centr3y)) or {na4alo proverki 2-h sharikov na pozicii 354} ((p2^.x<>centr2x) or (p2^.y<>centr3y))) and (((p3^.x<>centr2x) or (p1^.y<>centr3y)) or ((p2^.x<>centr3x) or (p2^.y<>centr3y))) then MoveTo(x+Step, y); {Right} 80:if (x<>198) and (y<>396) and ((x<>354) or (y<>240)) and (((p1^.x<>centr2x) or (p1^.y<>centr1y)) or {Ќ з «® Їа®ўҐаЄЁ Єа б®Ј® Ё бЁҐЈ® и аЁЄ Ї®§ЁжЁЁ 354} ((p2^.x<>centr2x) or (p2^.y<>centr2y))) and (((p1^.x<>centr2x) or (p1^.y<>centr2y)) or ((p2^.x<>centr2x) or (p2^.y<>centr1y))) and {Љ®Ґж Їа®ўҐаЄЁ Єа б®Ј® Ё бЁҐЈ® и аЁЄ Ї®§ЁжЁЁ 354} (((p1^.x<>centr3x) or (p1^.y<>centr3y)) or {Ќ з «® Їа®ўҐаЄЁ Єа б®Ј® Ё бЁҐЈ® и аЁЄ Ї®§ЁжЁЁ 510} ((p2^.x<>centr3x) or (p2^.y<>centr2y))) and (((p1^.x<>centr3x) or (p1^.y<>centr2y)) or ((p2^.x<>centr3x) or (p2^.y<>centr3y))) and {Љ®Ґж Їа®ўҐаЄЁ Єа б®Ј® Ё бЁҐЈ® и аЁЄ Ї®§ЁжЁЁ 510} (((p1^.x<>centr2x) or (p1^.y<>centr1y)) or {Ќ з «® Їа®ўҐаЄЁ Єа б®Ј® Ё §Ґ«Ґ®Ј® и аЁЄ Ї®§ЁжЁЁ 354} ((p3^.x<>centr2x) or (p3^.y<>centr2y))) and (((p1^.x<>centr2x) or (p1^.y<>centr2y)) or ((p3^.x<>centr2x) or (p3^.y<>centr1y))) and {Љ®Ґж Їа®ўҐаЄЁ Єа б®Ј® Ё §Ґ«Ґ®Ј® и аЁЄ Ї®§ЁжЁЁ 354} (((p1^.x<>centr3x) or (p1^.y<>centr3y)) or {Ќ з «® Їа®ўҐаЄЁ Єа б®Ј® Ё §Ґ«Ґ®Ј® и аЁЄ Ї®§ЁжЁЁ 510} ((p3^.x<>centr3x) or (p3^.y<>centr2y))) and (((p1^.x<>centr3x) or (p1^.y<>centr2y)) or ((p3^.x<>centr3x) or (p3^.y<>centr3y))) and {Љ®Ґж Їа®ўҐаЄЁ Єа б®Ј® Ё §Ґ«Ґ®Ј® и аЁЄ Ї®§ЁжЁЁ 510} (((p3^.x<>centr2x) or (p3^.y<>centr1y)) or {Ќ з «® Їа®ўҐаЄЁ §Ґ«Ґ®Ј® Ё бЁҐЈ® и аЁЄ Ї®§ЁжЁЁ 354} ((p2^.x<>centr2x) or (p2^.y<>centr2y))) and (((p3^.x<>centr2x) or (p3^.y<>centr2y)) or ((p2^.x<>centr2x) or (p2^.y<>centr1y))) and {Љ®Ґж Їа®ўҐаЄЁ §Ґ«Ґ®Ј® Ё бЁҐЈ® и аЁЄ Ї®§ЁжЁЁ 354} (((p3^.x<>centr3x) or (p3^.y<>centr3y)) or {Ќ з «® Їа®ўҐаЄЁ §Ґ«Ґ®Ј® Ё бЁҐЈ® и аЁЄ Ї®§ЁжЁЁ 510} ((p2^.x<>centr3x) or (p2^.y<>centr2y))) and (((p3^.x<>centr3x) or (p3^.y<>centr2y)) or ((p2^.x<>centr3x) or (p2^.y<>centr3y))) then MoveTo(x, y+Step); {Down} end; { case} end; procedure Tcircle.MoveTo(xnew,ynew:integer); var Flag:boolean; begin Flag:=IsVisible; if Flag then Hide; x:=xnew; y:=ynew; if Flag then Show; end; begin driver:=vga; mode:=2; initgraph(driver,mode,'c:\bp\bgi'); igrpole; new(p1,init(198,84,25,10)); new(p2,init(354,240,25,9)); new(p3,init(510,396,25,12)); p1^.show; p2^.show; p3^.show; repeat ch:=readkey; if ord(ch)=0 then ch:=readkey; p1^.drag(156,ch); p2^.drag(156,ch); p3^.drag(156,ch); until (((p1^.x=510) and (p1^.y=396)) and ((p2^.x=354) and (p2^.y=240)) and ((p3^.x=198) and (p3^.y=84))) or (ord(ch)=13);; closegraph; end. Вот сама прога Попробуйте её....ПЛИЗ!!! А то не хочется проблем потом от преподователя!!! ))) ![]() |
Олежечег(быв. Олежик) |
![]() ![]()
Сообщение
#10
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Я отладил её..а он пишет что очень большая строка..т.е. цикл ИФ..
Как мне сделать его меньше? |
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Цитата он пишет что очень большая строка..т.е. цикл ИФ.. Где именно он тебе такое пишет? Ты бы программу-то присоединил, а то телепатически не получается разобраться... |
SkIv |
![]()
Сообщение
#12
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Реальное имя: IVAN Репутация: ![]() ![]() ![]() |
Я отладил её..а он пишет что очень большая строка..т.е. цикл ИФ.. Как мне сделать его меньше? Ты про слишком длинную строку? Если да. То я избавлялся от этой неприятности, так: берешь разбиваешь условие на два, что бы влазило. Заводиш булевую переменную и смотриш если первое условие выполняется, то True и в следующей проверке у тебя уже есть истинная первая часть, сравниваешь ее с оставшейся и усе. |
Олежечег(быв. Олежик) |
![]() ![]()
Сообщение
#13
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Volvo .....//
она у тебя не запускается......? Я просто не понял!!!! Там адрес тогда измени на свой...а то уменя там..с:/bp/bgi ))))) Я по поводу разбиения....... Я придумал вот что! Спасибо SkIv за предложенную версию..... Можешь приблизительно написать.... Я понял, но не полностью... А что если.... В процедуре драг сделать ещё одну переменную, которую назвать NOMER и присвоить ей значение Pcircle.... .. ВОТ.. Это избавит от лишних действий... Код procedure Tcircle.Drag(Step:integer;ch:char;nomer1:pcircle); var nomer2,nomer3:pcircle; const centr1x=198; centr2x=354; centr3x=510; centr1y=84; centr2y=240; centr3y=396; begin if nomer1=p1 then begin nomer2:=p2; nomer3:=p3; end else if nomer1=p2 then begin nomer2:=p1; nomer3:=p3; end else if nomer1=p3 then begin nomer2:=p1; nomer3:=p2; end; Case Ord(Ch) of 72:if (x<>198) and (y<>84) and ((x<>354) or (y<>396)) and (((nomer1^.x<>centr2x) or (nomer1 ^.y<>centr1y)) or {Ќ з «® Їа®ўҐаЄЁ Єа б®Ј® Ё бЁҐЈ® и аЁЄ Ї®§ЁжЁЁ 354} ((nomer2^.x<>centr2x) or (nomer2^.y<>centr2y))) and (((nomer1^.x<>centr2x) or (nomer1^.y<>centr2y)) or ((nomer2^.x<>centr2x) or (nomer2^.y<>centr1y))) and {Љ®Ґж Їа®ўҐаЄЁ Єа б®Ј® Ё бЁҐЈ® и аЁЄ Ї®§ЁжЁЁ 354} (((nomer1^.x<>centr3x) or (nomer1^.y<>centr1y)) or {Ќ з «® Їа®ўҐаЄЁ Єа б®Ј® Ё бЁҐЈ® и аЁЄ Ї®§ЁжЁЁ 510} ((nomer2^.x<>centr3x) or (nomer2^.y<>centr2y))) and (((nomer1^.x<>centr3x) or (nomer1^.y<>centr2y)) or ((nomer2^.x<>centr3x) or (nomer2^.y<>centr1y))) and {Љ®Ґж Їа®ўҐаЄЁ Єа б®Ј® Ё бЁҐЈ® и аЁЄ Ї®§ЁжЁЁ 510} (((nomer1^.x<>centr2x) or (nomer1^.y<>centr1y)) or {Ќ з «® Їа®ўҐаЄЁ Єа б®Ј® Ё §Ґ«Ґ®Ј® и аЁЄ Ї®§ЁжЁЁ 354} ((nomer3^.x<>centr2x) or (nomer3^.y<>centr2y))) and (((nomer1^.x<>centr2x) or (nomer1^.y<>centr2y)) or ((nomer3^.x<>centr2x) or (nomer3^.y<>centr1y))) and {Љ®Ґж Їа®ўҐаЄЁ Єа б®Ј® Ё §Ґ«Ґ®Ј® и аЁЄ Ї®§ЁжЁЁ 354} (((nomer1^.x<>centr3x) or (nomer1^.y<>centr1y)) or {Ќ з «® Їа®ўҐаЄЁ Єа б®Ј® Ё §Ґ«Ґ®Ј® и аЁЄ Ї®§ЁжЁЁ 510} ((nomer3^.x<>centr3x) or (nomer3^.y<>centr2y))) and (((nomer1^.x<>centr3x) or (nomer1^.y<>centr2y)) or ((nomer3^.x<>centr3x) or (nomer3^.y<>centr1y))) then {Љ®Ґж Їа®ўҐаЄЁ Єа б®Ј® Ё §Ґ«Ґ®Ј® и аЁЄ Ї®§ЁжЁЁ 510} MoveTo(x, y-Step); {Up} Я ВПРИНЦИПЕ всё описал..... Случай..когда находится стенка я описал... Код Case Ord(Ch) of 72:if (x<>198) and (y<>84) and ((x<>354) or (y<>396)) and ........................... а вот всё ОГРОМНОЕ что идёт далее..это проверка на встречу двух шариков, чтоб один не налез на другого... У вас есть другие варианты.....??? |
SkIv |
![]()
Сообщение
#14
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Реальное имя: IVAN Репутация: ![]() ![]() ![]() |
Покажи эту длинную строку.
|
Олежечег(быв. Олежик) |
![]()
Сообщение
#15
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
ВОТ ПРОГА!!
Вроде работает..... Но там есть пару моментов.., когда шарик не показывается... это обычно происходит на синей позиции!!! В чём беда? вроде процедура SHOW хорошо написана!!! Код procedure Tcircle.show; var tempcolor:byte; begin tempcolor:=getcolor; setcolor(color); setfillstyle(solidfill,color); fillellipse(x,y,radius,radius); visible:=true; setcolor(tempcolor); end; и процедура move... вроде хорошо.. Но почему-то в позиции центра синего квадратика (354,240) смазывается (не показывается) синий или зелёный квадратик.. ... Может с процедурой HIDE что-то не то? Код procedure Tcircle.Hide; var tempColor:byte; begin tempColor:=color; color:=getpixel(x+radius+5,y+radius+5); setfillstyle(solidfill,color); show; visible:=false; color:=TempColor; end; Добавлено через 5 мин. Я просто пытался отлаьить на клавишу Ф7 ....а когда доходил до этой позиции.... Код 72:if (x<>198) and ................. он пишет фразу, что линия большая... Я щас думаю почему круги смываются в синем квадратикке....???? Подскажите!!! |
Archon |
![]()
Сообщение
#16
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 618 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата он пишет фразу, что линия большая... Ну еще бы... Ведь компилятор все это добро:72:if (x<>198) andсчитает одной строкой. Действительно не маленькая. Я в логику программы не вникал, но неужели нельзя написать проще? -------------------- Close the World...txeN eht nepO
|
volvo |
![]()
Сообщение
#17
|
Гость ![]() |
Цитата неужели нельзя написать проще? Да можно, конечно... Вот один из способов:
|
Олежечег(быв. Олежик) |
![]()
Сообщение
#18
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
VOLVO.......
огромное спасибо! Но...тот баг я понял как убрать, но не могу реализовать!!! Когда после запуска программы нажимаешь вправо потом вверх... синий шарик находится в правом верхнем углу, красный под ним, зелёный рядом..... Вот.. Из этого положения нажать вниз..и синий шарик исчезнет... Я понял почему... т.к. у меня ошибка выводится после вот этого! Код p1^.drag(156,ch,p1); p2^.drag(156,ch,p2); p3^.drag(156,ch,p3); потому что когда я двигаю вниз, поначалу двигается зелёный шарик, синий оказывается на красном, а потом красный перемещается и смазывает за собой свою позицию. т.е. синий!!!! Мне там надо сделать проверку ифами? |
Олежечег(быв. Олежик) |
![]()
Сообщение
#19
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
VOLVO//
Я проверил.... Но как сделать для "Налево"? Чек подходит для вниз и вверх.. ВОт смотри.. Я должен при движении налево у меня один у и два х Т.е. позиция игрик....84 а p1 и р2 могут распологаться на иксах 198 и 354.. А в функции чек я могу использовать только один х!!!! Как мне переделать? |
Олежечег(быв. Олежик) |
![]()
Сообщение
#20
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
VOLVO...
Смотри как я пишу... Код 72:if (x<>198) and (y<>84) and ((x<>354) or (y<>396)) and check_2(p1, p2, centr2x, centr1y, centr2y) and check_2(p1, p2, centr3x, centr1y, centr2y) and check_2(p1, p3, centr2x, centr1y, centr2y) and check_2(p1, p3, centr3x, centr1y, centr2y) and check_2(p3, p2, centr2x, centr1y, centr2y) and check_2(p3, p2, centr3x, centr1y, centr2y) then MoveTo(x, y-Step); {Up} 75:if (x<>198) and ((x<>510) or (y<>84)) and check_2(p1, p2, centr1y, centr1x, centr2x) and check_2(p1, p2, centr2y, centr1x, centr2x) and check_2(p1, p2, centr3y, centr1x, centr2x) and check_2(p1, p3, centr1y, centr1x, centr2x) and check_2(p1, p3, centr2y, centr1x, centr2x) and check_2(p1, p3, centr3y, centr1x, centr2x) and check_2(p3, p2, centr1y, centr1x, centr2x) and check_2(p3, p2, centr2y, centr1x, centr2x) and check_2(p3, p2, centr3y, centr1x, centr2x) then MoveTo(x-Step, y); {Left} 77:if (x<>510) and ((x<>354) or (y<>84)) and check_2(p1, p2, centr1y, centr1x, centr2x) and check_2(p1, p2, centr2y, centr2x, centr3x) and check_2(p1, p2, centr3y, centr2x, centr3x) and check_2(p1, p3, centr1y, centr1x, centr2x) and check_2(p1, p3, centr2y, centr2x, centr3x) and check_2(p1, p3, centr3y, centr2x, centr3x) and check_2(p3, p2, centr1y, centr1x, centr2x) and check_2(p3, p2, centr2y, centr2x, centr3x) and check_2(p3, p2, centr3y, centr2x, centr3x) then MoveTo(x+Step, y); {Right} 80:if (x<>198) and (y<>396) and ((x<>354) or (y<>240)) and check_2(p1, p2, centr2x, centr1y, centr2y) and check_2(p1, p2, centr3x, centr2y, centr3y) and check_2(p1, p3, centr2x, centr1y, centr2y) and check_2(p1, p3, centr3x, centr2y, centr3y) and check_2(p3, p2, centr2x, centr1y, centr2y) and check_2(p3, p2, centr3x, centr2y, centr3y) then {Љ®Ґж Їа®ўҐаЄЁ Єа б®Ј® Ё §Ґ«Ґ®Ј® и аЁЄ Ї®§ЁжЁЁ 510} MoveTo(x, y+Step); {Down} end; { case} На низ и вверх работает.. А влево или вправо он сжирает шары!!!!!!!!!!!!! |
![]() ![]() |
![]() |
Текстовая версия | 15.07.2025 1:31 |