![]() |
![]() ![]() |
![]() |
Ale}{@nd3R |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 11 Пол: Мужской Реальное имя: Саня Репутация: ![]() ![]() ![]() |
слушайте, люди, как можно модифицировать "Змейку", чтобы она подразделялась на уровни, то есть, допустим, если "сьел" точек штук 20, то осуществлялся переход на новый уровень: увеличивалась скорость и создавались препятствия, которых с увеличением уровня становилось бы все больше и больше. Кроме того, как осуществить возможность СОЗДАВАТЬ уровни в самой игре (вот выбрали мы опцию создать уровень, сделали себе препятствия как нравится и запустили его). Сама змейка такая:
Program Snake; uses crt,graph; var gd,gm: integer; x_min, y_min, x_max, y_max, x, y, score, best: word; size,level: byte; n, k: word; way_x, way_y: shortint; score_str, best_str: string[10]; ch, level_ch: char; point, exit: boolean; koor: array[1..400,1..2] of word; f: text; procedure Delay(time:longint); var ctime,time2:Longint; begin ctime:=meml[$40:$006c]; time2:=time div 55+ctime; while time2>meml[$40:$006c] do; end; begin x_min:=30; y_min:=45; x_max:=615; y_max:=450; k:=15; gd:=detect; initgraph(gd,gm,''); setfillstyle(6,6); bar(x_min-15,y_min-15,x_max+15,y_max+15); setfillstyle(1,1); bar(x_min,y_min,x_max,y_max); size:=5; x:=x_min+size*k; y:=y_max div 2; setfillstyle(9,14); bar(x-size*k,y,x,y+k); way_x:=1; way_y:=0; for n:=1 to size do begin koor[n,1]:=x-n*k+k; koor[n,2]:=y end; point:=false; settextstyle(2,0,6); { ’ҐЄбв ®Ґpег } setcolor(15); outtextxy(50, 7, 'ЋзЄЁ:'); outtextxy(450,7, 'ђҐЄ®pg:'); setcolor(9); outtextxy(110, 7, '0'); setcolor(4); outtextxy(180, 7, '‚®ҐgЁвҐ гp®®Ґ (1-9):'); assign(f,'record.snk'); { Ћ®p ®®вЄ д ©« б pҐЄ®p¤®¬ } reset(f); repeat read(f,ch); best_str:=best_str+ch until eof(f); close(f); setcolor(2); outtextxy(530,7,best_str); repeat level_ch:=readkey; if level_ch=#27 then halt until (level_ch>=#49) and (level_ch<=#57); val(level_ch,level,n); setfillstyle(0,0); bar(170,7,400,25); setcolor(15); outtextxy(235,7,'”p®®Ґ:'); setcolor(3); outtextxy(315,7,level_ch); repeat if keypressed then ch:=readkey; case ch of #72: if way_y=0 then begin way_x:=0; way_y:=-1 end; #75: if way_x=0 then begin way_x:=-1; way_y:=0 end; #77: if way_x=0 then begin way_x:=1; way_y:=0 end; #80: if way_y=0 then begin way_x:=0; way_y:=1 end; #27: break end; setfillstyle(1,1); bar(koor[size,1]-k, koor[size,2], koor[size,1], koor[size,2]+k); for n:=size downto 2 do { ЏҐpҐбзҐв Є®®p¤Ёв } begin koor[n,1]:=koor[n-1,1]; koor[n,2]:=koor[n-1,2] end; koor[1,1]:=koor[1,1]+way_x*k; koor[1,2]:=koor[1,2]+way_y*k; if (koor[1,1]>x_max) or (koor[1,2]=y_max) or (koor[1,1]=x_min) or (koor[1,2]<y_min) then { Џ®Ї ¤ ® б⥠} begin sound(100); delay(100); nosound; break end; if point=false then { ђЁб®® в®зҐЄ } begin repeat randomize; x:=(random((x_max-x_min) div k)+1)*k+x_min; y:=(random((y_max-y_min) div k)+1)*k+y_min; point:=true; for n:=1 to size do if (x=koor[n,1]) and (y=koor[n,2]+k) then point:=false until point; setfillstyle(9,4); setcolor(2); fillellipse(x-7,y-7,6,6); setcolor(0); line(0,0,0,15) end; if (x=koor[1,1]) and (y=koor[1,2]+k) then { ‘ꥤ в®зҐЄ } begin sound(900); inc(size); setfillstyle(0,0); bar(105,1,200,25); inc(score,level); str(score,score_str); setcolor(9); outtextxy(110,7,score_str); point:=false end; for n:=2 to size do { ‘ ¬®ЇҐpҐбҐзҐ } if (koor[1,1]=koor[n,1]) and (koor[1,2]=koor[n,2]) then begin sound(150); delay(100); nosound; exit:=true; break end; setfillstyle(9,14); bar(koor[1,1]-k, koor[1,2], koor[1,1], koor[1,2]+k); delay(181-9*level); if point=false then nosound; if keypressed then ch:=readkey until (ch=#27) or exit; setfillstyle(0,0); bar(170,7,400,25); val(best_str,best,n); setcolor(4); if score<=best then outtextxy(220, 7, '‚л Їp®ЁЈp «Ё!') else begin outtextxy(220, 7, 'H®®л© pҐЄ®pg!'); rewrite(f); write(f,score_str); close(f) end; repeat ch:=readkey until (ch>#0) and (ch<>#72) and (ch<>#75) and (ch<>#77) and (ch<>#80); closegraph; readln; end. тьфу, с кодировкой в комментариях проблемы -------------------- Rise and shine!
|
Ale}{@nd3R |
![]()
Сообщение
#2
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 11 Пол: Мужской Реальное имя: Саня Репутация: ![]() ![]() ![]() |
пожалуйста, не надо меня игнорировать. Просто нужен совет, догадка, мысль.....я ж не прошу написать программу
![]() -------------------- Rise and shine!
|
мисс_граффити |
![]()
Сообщение
#3
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
ты бы код в теги заключал...
еще не поздно исправить ;) ладно, по теме... 1. могу выложить свою Змейку (писала курсовик в прошлом году. правда, на делфи). 2. кто тебе мешает добавить счетчик съеденных "точек" (по ним можно считать очки, так что переменных больше не станет) и сделать, например, koeff:=count div 20, где count - количество съеденного, koeff - сдвиг змейки. 3. как ты представляешь себе создание уровня? вводится количество препятствий и, координаты левого верхнего угла и длина стороны (препятствие - квадратик)? -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Game-lord |
![]()
Сообщение
#4
|
![]() Группа: Пользователи Сообщений: 6 Пол: Мужской Репутация: ![]() ![]() ![]() |
Уровень просто сделать записанный в массив и всё. Его уже и редактировать, а потом запускать змейку.
-------------------- |
![]() ![]() |
![]() |
Текстовая версия | 5.08.2025 21:34 |