forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=13)
-   -   Select;case (http://forum.boolean.name/showthread.php?t=2326)

Atomikc 08.01.2007 15:11

Select;case
 
Сделал меню и делаю саму игру. 2 экрана . Появилось необходимость сделать ещё несколько экранов: GAMOVER, INTRO, магазин и т.д.
Если добавитть case 3 то выдаёт глюк.
Как обойти. Где у меня ошибка?

Код:

;Инициализация графики
Graphics 800,600,32,2
 SetBuffer BackBuffer()
; Создание нескольких екранов
Global game=1
Repeat
Select game
Case 1

; ТЕЛО МЕНЮ

 Flip()
Until game=2;
;--------------------------
Case 2
: Тело игры

Flip()
Until game=1
;----------------------------
End Select
Forever


Diplomat 08.01.2007 15:27

Re: Select;case
 
Два лишних Until. Каким боком они там могут работать? %)

Nord 08.01.2007 15:46

Re: Select;case
 
Для начала поставь Repeat после каждого Case, а потом смотри. У меня всё работает. И перед "тело игры" у тебя двоеточие, в браузере набирал что-ли?

alcoSHoLiK 08.01.2007 16:36

Re: Select;case
 
В разделе справки Basic есть описание операторов Select и Repeat. Не мешало бы туда заглянуть.

Atomikc 08.01.2007 20:51

Re: Select;case
 
Until Вы правы. Взря нарисовал. Но они там нужны т.к. там в каждом case repeat стоит. зыбыл убрать. Но вопрос то не в этом. Я пишу третюю case а он мне пишет типа что то там неправельно.. В справке дохлый пример.

Nord 08.01.2007 21:26

Re: Select;case
 
Выложи код с тремя ветвями, а мы посмотрим чего там не так. Я добавлял, все работало.

Raiter 08.01.2007 21:26

Re: Select;case
 
что конкретно пишет?

Atomikc 09.01.2007 00:08

Re: Select;case
 
пишит: Ecstracting 'Case','Default' or 'End Selection'.
Код:
Код:

;Инициализация графики
Graphics 800,600,32,2
 SetBuffer BackBuffer()
; Создание нескольких екранов
Global game=1
Repeat
Select game
Case 1
;  А вот это меню.
Cls()
; Шрифт
font=LoadFont("Arial Cyr",30,1)

;цикл
  Repeat
  Cls()

      If MouseDown(1) Then game=2 
;Текст
  SetFont font:Color 0,170,255:Text 399,219,"НАжми на мыщ. Окно 1",1,1

 Flip()
Until game=3;<-конец главного цикла
;---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
; Второе окно
Case 2
;  А вот это меню.
Cls()
; Шрифт
font=LoadFont("Arial Cyr",30,1)

;цикл
 Repeat
    Cls()

      If MouseDown(1) Then game=2 
;Текст
  SetFont font:Color 0,170,255:Text 399,219,"НАжми на мыщ. Окно 3",1,1

 Flip()
Until game=2
-----------------------
; Окно самой игры
Case 2
;  А вот это меню.
Cls()
; Шрифт
font=LoadFont("Arial Cyr",30,1)

;цикл
 Repeat
    Cls()

      If MouseDown(1) Then game=1 
;Текст
  SetFont font:Color 0,170,255:Text 399,219,"НАжми на мыщ. Окно 2",1,1

 Flip()
Until game=1
-----------------------
; Окно самой игры
Case 3
;  А вот это меню.
Cls()
; Шрифт
font=LoadFont("Arial Cyr",30,1)

;цикл
 Repeat
    Cls()

      If MouseDown(1) Then game=2 
;Текст
  SetFont font:Color 0,170,255:Text 399,219,"НАжми на мыщ. Окно 3",1,1

 Flip()
Until game=2
-----------------------
End Select


HolyDel 09.01.2007 01:36

Re: Select;case
 
замороченно, причем по аццки.
вобщем, закоменть все ---------
и добавь в конец forever.
очень, очень мне не нравится етот метод.

alcoSHoLiK 09.01.2007 01:54

Re: Select;case
 
У тебя два раза Case 2. Структуру переделай, чтобы не все в куче было. Сделай вызов отдельных модулей через функции, например. Ошибка тут логическая, вызвана неразберихой в коде.

Atomikc 09.01.2007 03:31

Re: Select;case
 
Да я сам уже путаю. Панаписал. Вообще у меня весь код в порядке, и откоментирован. Мне влом было его полностью выкладывать. поэтому напишу его заного с поправками
Код:

;Инициализация графики
Graphics 800,600,32,2
 SetBuffer BackBuffer()
; Создание нескольких екранов
Global game=1
;цикл
Repeat
Select game
Case 1
;  А вот это меню.
Cls()
; Шрифт
font=LoadFont("Arial Cyr",30,1)
;цикл
  Repeat
  Cls()
; Если нажать на мыш, то case 2
      If MouseDown(1) Then game=2 
;Текст
  SetFont font:Color 0,170,255:Text 399,219,"НАжми на мыщ. Окно 1",1,1
Flip()
Until game=3;??????????
;---------------------------
; Окно самой игры
Case 2
;  А вот это меню.
Cls()
; Шрифт
font=LoadFont("Arial Cyr",30,1)
;цикл
 Repeat
    Cls()
; Если нажать на мыш, то case 3
    If MouseDown(1) Then game=3 
;Текст
  SetFont font:Color 0,170,255:Text 399,219,"НАжми на мыщ. Окно 2",1,1

 Flip()
Until game=1;??????????
-----------------------
; Окно самой игры
Case 3
;  А вот это меню.
Cls()
; Шрифт
font=LoadFont("Arial Cyr",30,1)

;цикл
 Repeat
    Cls()
;; Если нажать на мыш, то case 1
      If MouseDown(1) Then game=1 
;Текст
  SetFont font:Color 0,170,255:Text 399,219,"НАжми на мыщ. Окно 3",1,1

 Flip()
Until game=2;??????????
-----------------------
End Select
Forever

А он всё равно работать не хочет.

moka 09.01.2007 03:40

Re: Select;case
 
Никогда, не надо этого "Влом код выкладывать", никому не нужен он, в плохих целях, только для самообучения или что-бы помоч.
А если-же произойдёт случай в 1 из 999^999, то тот, кто сделал что-либо плохое, просто неудачник, и ничего хорошего у него из этого не выйдет. В этом есть 2 смысла относительно тому кто читает, задумайтесь. ;)

Atomikc 09.01.2007 03:45

Re: Select;case
 
весь код. Мучейся теперь, разберай. Говорю сразу case 3 там нету. не ищите. Напишите только как добавить, что изменить, и чтоб работало.
Код:

;=================================================
; Star Trash
; Космическая стрелялка. Дата начало работы 27.12.06
;=================================================
;Инициализация графики
Graphics 800,600,32,2
 SetBuffer BackBuffer()
; Создание нескольких екранов
Global game=1
Repeat
Select game
Case 1
;  А вот это меню.
Cls()
; Шрифт
font=LoadFont("Arial Cyr",30,1)
Tex=LoadFont("Arial Cyr",20,1)
dat=LoadFont("Arial Cyr",13,1)
;Переменные
x=0
y=0
z=0
;Фон меню
img=LoadImage("data/menu/galaxi.jpg")
;звёзы
star=LoadImage("Data/menu/fon.png")
star2=LoadImage("Data/menu/fon2.png")
;Логотип
 Logo=LoadImage("data/menu/logo.png")
MaskImage  logo,0,0,0 ; Маска
;Музыка
sam=PlayMusic("data/sound/menu.mp3") ;загрузка музыки
;курсор
curs=LoadImage("data/menu/cursor.bmp");Загруска курсора
HidePointer; Курсор невидим
;Загрузка кнопки
knop=LoadAnimImage("Data/menu/knop.png",175,40,0,2)
knop2=knop
knop3=knop
knop4=knop
; Загрузка диалогового окна
windialog=LoadImage("data/menu/windialog.png")
;цикл
  Repeat
  Cls()
    DrawImage(img, 0, 0);Позиция галактики
    TileImage star,0,qq:qq=qq- -3
    TileImage star2,0,hh:hh=hh- -1
    DrawImage(logo, 100,50);позиция логотипа
    DrawImage(knop, 310,200);позиция кнопки1
    DrawImage(knop2, 310,245);позиция кнопки2
    DrawImage(knop3, 310,290);позиция кнопки3
    DrawImage(knop4, 310,335);позиция кнопки4
    DrawImage(windialog, 100,385);позиция логотипа
; Если курсор  над кнопой Новая игра  и нажата мыш то запустить игру
  If MouseX()>310 And MouseY()>200 And MouseX()<485 And MouseY()<240
    DrawImage(knop, 310,200,1)
      If MouseDown(1)
        z=1
      EndIf
  EndIf
If z=1 Then game=2 
;Если если курсор  над кнопой Помощь и нажата мыш то показать помощь и стереть другое
    If MouseX()>310 And MouseY()>245 And MouseX()<485 And MouseY()<285
      DrawImage(knop2, 310,245,1)
        If MouseDown(1)
          x=1 
          y=0
        EndIf
      EndIf
    If x=1  SetFont tex Color 255,255,255:Text 160,410,"Помощь:",1,1    SetFont tex Color 255,255,255:Text 175,426,"w - Вперёд",1,1    SetFont tex Color 255,255,255:Text 167,442,"s - Назад",1,1    SetFont tex Color 255,255,255:Text 168,458,"a - Влево",1,1    SetFont tex Color 255,255,255:Text 172,474,"d - Вправо",1,1    SetFont tex Color 255,255,255:Text 225,490,"Кнопка мыши 1 - пушка",1,1    SetFont tex Color 255,255,255:Text 229,506,"Кнопка мыши 2 - ракеты",1,1  SetFont tex Color 255,255,255:Text 324,524,"Пробел - Вертикс. При наличии 100 минералов",1,1
    If x=0 Then SetFont tex Color 255,255,255:Text 160,410," ",1,1
; Если если курсор  над кнопой Авторы и нажата мыш то паказать авторов и стереть другое
    If MouseX()>310 And MouseY()>290 And MouseX()<485 And MouseY()<330
        DrawImage(knop3, 310,290,1)
        If MouseDown(1)
          x=0
          y=1
        EndIf
    EndIf
  If y=1 Then  SetFont tex Color 255,255,255:Text 150,410,"Автор:",1,1    SetFont tex Color 255,255,255:Text 200,426,"Миха aka Atomikc",1,1    SetFont tex Color 255,255,255:Text 190,442,"[email protected]",1,1    SetFont tex Color 255,255,255:Text 268,458,"________________________________",1,1    SetFont tex Color 255,255,255:Text 380,484,"Отдельное спасибо Shad0w agent, за предоставление семплов",1,1    SetFont tex Color 255,255,255:Text 385,500,"А также сайту www.Boolean.name и всем тем, кто мне помогал...",1,1
  If y=0 Then SetFont tex Color 255,255,255:Text 160,410," ",1,1
;Если если курсор  над кнопой Выход и нажата мыш то выход
      If MouseX()>310 And MouseY()>335 And MouseX()<485 And MouseY()<375
        DrawImage(knop4, 310,335,1)
          If MouseDown(1)
        :End
          EndIf
      EndIf
;Текст кнопок
  SetFont font:Color 0,170,255:Text 399,219,"Новая игра",1,1
  SetFont font:Color 0,170,255:Text 399,264,"Помощь",1,1
  SetFont font:Color 0,170,255:Text 399,309,"Авторы",1,1
  SetFont font:Color 0,170,255:Text 399,354,"Выход",1,1
;Текст версии игры
  SetFont dat Color 255,255,255:Text 615,560,"Star Trash.    Версия игры  0.1",1,1
    DrawImage(curs, MouseX(), MouseY());Позиция Курсора
If game=1 Then StopChannel(sam2) ; стоп музыка
    If ChannelPlaying(sam)=0 Then sam=PlayMusic("data/sound/menu.mp3") ; Играть заного
 Flip()
Until game=2;<-конец главного цикла
;---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
; Окно самой игры
Case 2
;Переменные
a=0; Очки
b=0; ракеты
c=0; минералы
d=100; Жизнь
e=8; Point
;шрифт
font=LoadFont("Arial Cyr",40,1)
Tex=LoadFont("Arial Cyr",15,1)
;Check_point
point=LoadAnimImage("data/data/point/point.png",63,73,0,8)
;Vertix
vert=LoadAnimImage("data/data/point/vert.png",74,64,0,3)
x=0
;GUI
gal=LoadImage("data/menu/galaxi.jpg")
;Фон меню
img=LoadImage("data/data/GUI_2.png")
;звёзы
star=LoadImage("Data/menu/fon.png")
star2=LoadImage("Data/menu/fon2.png")
MaskImage  star,0,0,0 ; Маска
;Музыка
sam2=PlayMusic("data/sound/gama.mp3") ;загрузка музыки
;курсор
curs2=LoadImage("data/data/cur2.bmp");Загруска курсора
HidePointer; Курсор невидим
MidHandle curs2; Посередине картинки
;Авианосец
avia=LoadImage("data/data/Avianosec_1.bmp");Загруска курсора
  ScaleImage avia, 0.7,0.7; Размеры
;цикл
Repeat
Cls()
  DrawImage(gal, 0, 0);Позиция галактики
  TileImage star,0,qq:qq=qq- -3
  TileImage star2,0,hh:hh=hh- -1
  DrawImage(avia, 300, 470);Авианосец
  DrawImage(img, 0, 0);Позиция GUI
;Chit
If KeyDown(78) Then a=a-10 b=b+1  c=c+10 If e<8 Then e=e+1
If KeyDown(74) Then a=a+10 b=b-1  c=c-10 If e>1 Then e=e-1

SetFont tex Color 255,255,255:Text 749,23,"Очки: "+a ,1,1
SetFont tex Color 255,255,255:Text 127,574,b ,1,1 ;Ракеты
SetFont tex Color 255,255,255:Text 191,574,c ,1,1 ;минералы
DrawImage(vert, 44, 497,0)
;point
If e=8 Then  DrawImage(point, 20, 506,0);Позиция point1
If e=7 Then  DrawImage(point, 20, 506,1);Позиция point1
If e=6 Then  DrawImage(point, 20, 506,2);Позиция point1
If e=5 Then  DrawImage(point, 20, 506,3);Позиция point1
If e=4 Then  DrawImage(point, 20, 506,4);Позиция point1
If e=3 Then  DrawImage(point, 20, 506,5);Позиция point1
If e=2 Then  DrawImage(point, 20, 506,6);Позиция point1
If e=1 Then  DrawImage(point, 20, 506,7);Позиция point1
;Vertix
If c=0 Then x=0
  If c=0 Then DrawImage(vert, 44, 497,0)
 If c>=100 And c<>0 Then x=1
  If x=1 Then DrawImage(vert, 44, 497,1);Позиция  Vertix
If c<100 And c<>0 Then x=2
  If x=2 Then DrawImage(vert, 44, 497,2);Позиция  Vertix

  DrawImage(curs2, MouseX(), MouseY());Позиция Курсора
If game=2 Then StopChannel(sam) ; стоп музыка
 If ChannelPlaying(sam2)=0 Then sam2=PlayMusic("data/sound/gama.mp3") ; Играть заного
If  KeyDown(1) Then game=1
Flip()
Until game=1
;----------------------------
End Select
Forever


Nord 09.01.2007 09:49

Re: Select;case
 
Atomikc
В 11 посте не все --------- закоментировал. Неужели так сложно поставить ; ? Так все работает, не понимаю твою проблему.
Код:

Graphics 800,600,32,2
SetBuffer BackBuffer()
Global game=1

Repeat
Select game
;-----------------------
Case 1
Cls()
font=LoadFont("Arial Cyr",30,1)

  Repeat
    Cls()
    If MouseDown(1) Then game=2 
    SetFont font:Color 0,170,255:Text 399,219,"НАжми на мыщ. Окно 1",1,1
    Flip()
  Until game=3
;-----------------------
Case 2
Cls()
font=LoadFont("Arial Cyr",30,1)

  Repeat
    Cls()
    If MouseDown(1) Then game=3 
    SetFont font:Color 0,170,255:Text 399,219,"НАжми на мыщ. Окно 2",1,1
    Flip()
  Until game=1
;-----------------------
Case 3
Cls()
font=LoadFont("Arial Cyr",30,1)

  Repeat
    Cls()
    If MouseDown(1) Then game=1 
      SetFont font:Color 0,170,255:Text 399,219,"НАжми на мыщ. Окно 3",1,1
    Flip()
  Until game=2
;-----------------------
End Select
Forever


Atomikc 10.01.2007 15:58

Re: Select;case
 
Даже странно. а работает. Ничё не понимаю. Не работало раньше, и зароботало. Толи мир сашол сума толи я не выспался тогда. Наверно вётаки 2-е... :) А ----------------------- небыло раньше. Эт я потм в браузере добавил.


Часовой пояс GMT +4, время: 00:02.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot