Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Паскаль
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 11.09.2018, 22:53   #1
Roman_Jarckov23
Пользователь
 
Регистрация: 11.09.2018
Сообщений: 20
Репутация: 10
Печаль Игра на PascalABC.Net: Не заменяет изображение в окне!

При нажатии в меню на играть, должна запускаться сама игра, но не запускается! То есть пока меню открыто menu1 = true, когда нажимаешь играть, то его значение должно меняться на false,а active1 =true, значения этих переменных передаются в процедуры menu и game соответственно! Тупо говоря, должна перерисоваться картинка, но этого не происходит, что не так?
Код:

program gameCLICK;
uses GraphABC,Utils;
var  fon,click2,money,n,lvl:string;
     fon1,click1,money1,b,lvl1:Picture;
     r:integer;
     
     menu1:boolean;
     MNactive:boolean;
     active1:boolean:=false;
    
     
     pGold:integer:=0;
     mon1:integer:=1;
     mon2:integer:=10;
     
     pLvl:integer:=0;
     click:integer;
     //улучшенния========
     
     //улучшенния========
     
//Кликабельность=================
procedure MouseUp(x,y,mb:integer);

  begin
   //GOLD+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     if (mb=1) and (x > 300) and (x < 460) and (y > 400) and (y < 450) then 
        begin 
         randomize;
         SetBrushColor(ClWhite);
         SetFontColor(ClGold);
         SetFontSize(20);
         r:=random(mon1,mon2);
         pGold:= pGold+r;
         textout(170,40,pGold);
         click:=click + 1;
         pLvl:=click div 100;
         SetBrushColor(ClNavy);
         SetFontColor(ClWhite);
         SetFontSize(21);
         TextOut(256,1,PLvl);
         SetbrushColor(clBlue);
         SetFontSize(15);
         TextOut(200,85,click);
       
        end;
   //GOLD+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
   
   //МАТРОС===================================================================
    
      if (mb=1) and (x > 10) and (x < 100) and (y > 110) and (y < 140) then 
         begin
              if pLvl >= 5 then
         end;
   //МАТРОС===================================================================                 
                              
                          
   //MENU=====================================================================Обработка нажатия на играть!
       if menu1 = true then
         begin
          if (mb=1) and (x > 0) and (x < 150) and (y > 0) and (y < 50) then 
                    begin
                      menu1:=false;
                      active1:=true;
                    end;
         end;           
   //MENU===================================================================== 
                        end;
procedure game(active:boolean);
begin
if menu1 = false then
 begin
if active =true then
   begin
        LockDrawing;
        //LOGO==LOGO========
         n:='logo.jpg';
         b:=Picture.Create(n);
         b.Load(n);
         b.Draw(672,0);  
         //LOGO==LOGO========
         
         
         //Money=============
           money:='money.png';
           money1:=Picture.Create(money);
           money1.Load(money);
           money1.Draw(115,30);
         //Money=============
         
          //plvl
         lvl:='lvl.jpg';
         lvl1:=Picture.Create(lvl);
         lvl1.Load(lvl);
         lvl1.Draw(115,1);
         //plvl
         //Clicks========
            click2:='Clicks.png';
            click1:=Picture.Create(click2);
            click1.Load(click2);
            click1.Draw(115,85);
         //Clicks========
        
       //Улучшения=====================
        SetBrushColor(Clwhite);
       Rectangle(1,1,111,700);
        SetFontColor(ClBlack);
       SetFontStyle(fsBoldItalic);
       SetFontSize(9);
       TextOut(15,11,'УЛУЧШЕНИЯ');
       SetBrushColor(ClGold);
       line(1,40,110,40);
       //=====================
       Rectangle(10,70,100,100);
       FillRect(10,70,100,100);
       //=====================
       Rectangle(10,110,100,140);
       FillRect(10,110,100,140);
        SetBrushColor(ClGold);
       SetFontColor(ClBlack);
       SetFontStyle(fsBoldItalic);
       SetFontSize(6);
       TextOut(17,120,'Нанять Матроса');
       
       Rectangle(10,150,100,180);
       FillRect(10,150,100,180);
        SetBrushColor(ClGold);
       SetFontColor(ClBlack);
       SetFontStyle(fsBoldItalic);
       SetFontSize(6);
       TextOut(17,160,'Нанять Шкипера');
       
       Rectangle(10,190,100,220);      
       FillRect(10,190,100,220);
        SetBrushColor(ClGold);
       SetFontColor(ClBlack);
       SetFontStyle(fsBoldItalic);
       SetFontSize(6);
       TextOut(17,200,'Нанять Канонира');
       
       Rectangle(10,230,100,260);      
       FillRect(10,230,100,260);
        SetBrushColor(ClGold);
       SetFontColor(ClBlack);
       SetFontStyle(fsBoldItalic);
       SetFontSize(6);
       TextOut(17,240,'Нанять Рулевого');
       
       Rectangle(10,270,100,300);      
       FillRect(10,270,100,300);
         SetBrushColor(ClGold);
       SetFontColor(ClBlack);
       SetFontStyle(fsBoldItalic);
       SetFontSize(6);
       TextOut(17,280,'Нанять Боцмана');
       
       Rectangle(10,310,100,340);      
       FillRect(10,310,100,340);
         SetBrushColor(ClGold);
       SetFontColor(ClBlack);
       SetFontStyle(fsBoldItalic);
       SetFontSize(6);
       TextOut(17,320,'Нанять Старпома');
       
       Rectangle(10,350,100,380);      
       FillRect(10,350,100,380);
        SetBrushColor(ClGold);
       SetFontColor(ClBlack);
       SetFontStyle(fsBoldItalic);
       SetFontSize(6);
       TextOut(17,360,'Нанять Мейстера');
      
       //Улучшения=====================
          
          
          
       //Кнопка клика==================
       SetBrushColor(ClBlack);
       Rectangle(300,400,460,450);
       SetBrushColor(ClBlack);
       SetFontColor(ClGold);
       SetFontStyle(fsBoldItalic);
       SetFontSize(22);
       TextOut(338,410,'GOLD');
       //Кнопка клика==================
       ReDraw;
       
     
end;
end;
end;
 //Меню======================================
procedure menu(MNactive:boolean);
     begin
         if MNactive = true then
             begin 
               LockDrawing;
               //FON==========================
               fon:='FON.jpg';
               fon1:=Picture.Create(fon);
               fon1.Load(fon);
               fon1.Draw(0,0);
               //fon==========================
               SetBrushColor(ClSkyBlue);
               rectangle(0,0,150,50);
               rectangle(0,52,150,101);
               rectangle(0,103,150,152);
               SetFontColor(ClNavy);
               SetFontSize(19);
               TextOut(34,10,'Играть');
               //rectangle1
               TextOut(7,60,'Как играть?');
               //rectangle2
               TextOut(34,110,'Выход');
               //rectangle3
               ReDraw;
             end;
     //Меню======================================
     end;
begin
      //=====Процедуры======
         OnMouseUp:=MouseUp;
      //=====Процедуры======
      SetWindowTitle('PIRATE_CLICKER v1.1');
      Setwindowsize(800,600);
      menu1:=true;
      menu(menu1);
      
end.

Roman_Jarckov23 вне форума   Ответить с цитированием
Старый 11.09.2018, 23:36   #2
ViktorR
Профессионал
 
Регистрация: 23.10.2010
Сообщений: 1,164
Репутация: 603
По умолчанию

Ну так, тупо: "А в каком месте
Цитата:
... значения этих переменных передаются в процедуры menu и game соответственно.
происходит передача в процедуру game?"
__________________
Как-то так, ...
ViktorR вне форума   Ответить с цитированием
Старый 11.09.2018, 23:51   #3
Roman_Jarckov23
Пользователь
 
Регистрация: 11.09.2018
Сообщений: 20
Репутация: 10
По умолчанию

В процедуре MouseUp! В начале программы значение game = false, а menu1 = true, появляется окно с меню, там есть кнопка играть, если на неё нажать должно измениться содержимое окна на то что находится в процедуре game, но этого не происходит хотя вроде прописано правильно!
В процедуре MouseUp записаны действия программы при нажатии на ЛКМ в определенной зоне, но эти действия почему-то не выполняются!
Roman_Jarckov23 вне форума   Ответить с цитированием
Старый 11.09.2018, 23:53   #4
Roman_Jarckov23
Пользователь
 
Регистрация: 11.09.2018
Сообщений: 20
Репутация: 10
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Ну так, тупо: "А в каком месте
происходит передача в процедуру game?"
Данные передаются в game!
Roman_Jarckov23 вне форума   Ответить с цитированием
Старый 11.09.2018, 23:54   #5
Roman_Jarckov23
Пользователь
 
Регистрация: 11.09.2018
Сообщений: 20
Репутация: 10
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Ну так, тупо: "А в каком месте
происходит передача в процедуру game?"
В MouseUp!
Roman_Jarckov23 вне форума   Ответить с цитированием
Старый 12.09.2018, 01:20   #6
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,321
Репутация: 5258
По умолчанию

Цитата:
Сообщение от Roman_Jarckov23 Посмотреть сообщение
В MouseUp!
покажите, в какой именно строчке MouseUp происходит вызов процедуры Game()

ответ - ни в какой!
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 12.09.2018, 08:37   #7
Roman_Jarckov23
Пользователь
 
Регистрация: 11.09.2018
Сообщений: 20
Репутация: 10
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
покажите, в какой именно строчке MouseUp происходит вызов процедуры Game()

ответ - ни в какой!
game - сама процедура игры, которая отрисовывает интерфейс!
menu - меню, процедура, которая отрисовывает интерфейс меню!
Есть строчки:
Код:

if menu1 = true then
         begin
          if (mb=1) and (x > 0) and (x < 150) and (y > 0) and (y < 50) then //<----- ЭТО ОБРАБАТЫВАЕТ НАЖАТИЕ, ЕСЛИ МЕНЮ(ПРОЦЕДУРА) ЗАПУЩЕНА!
                    begin
                      menu1:=false;// <--- Это отключает меню!
                      active1:=true;// <---- Это включает игру!
                    end;
         end;

Просто, как сделать так чтобы, если я нажал на играть, то отрисовавался сам интерфейс игры, а интерфейс меню пропадал???
Roman_Jarckov23 вне форума   Ответить с цитированием
Старый 12.09.2018, 10:39   #8
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,321
Репутация: 5258
По умолчанию

Цитата:
Сообщение от Roman_Jarckov23 Посмотреть сообщение
game - сама процедура игры, которая отрисовывает интерфейс!
Вы не понимаете.

чтобы выполнилась процедура в Паскаль, ей нужно передать управление.
Т.е. в коде где-то должно быть написан вызов процедуры:
Код:

game(true);

или
Код:

game(active1);


p.s. передаваемые Вами в процедуры menu() и game() параметры бессмысленны.
если передадите false - то в процедуре ничего не выполнится.
Поэтому вместо menu(menu1) дожно быть
Код:

if menu1 then menu();

но это уже мелочи, по сравнению с остальным.
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 12.09.2018, 13:03   #9
NetSpace
Профессионал
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Адрес: п.Путеец, Печорский р-н
Сообщений: 1,324
Репутация: 482
По умолчанию

а сделайте этот параметр просто глобальным. и в нужном месте меняйте его как вам надо. ЛКМ: b=0. ПКМ: b=1. а если средней щёлкнул: вообще b=-1;
а то с этими передачами параметров и вызовами функций и со скобочками новичку запутаться немудрено.....
__________________
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума   Ответить с цитированием
Старый 12.09.2018, 13:35   #10
Roman_Jarckov23
Пользователь
 
Регистрация: 11.09.2018
Сообщений: 20
Репутация: 10
По умолчанию

Цитата:
Сообщение от NetSpace Посмотреть сообщение
а сделайте этот параметр просто глобальным. и в нужном месте меняйте его как вам надо. ЛКМ: b=0. ПКМ: b=1. а если средней щёлкнул: вообще b=-1;
а то с этими передачами параметров и вызовами функций и со скобочками новичку запутаться немудрено.....
Не понял! Можно пример кода?
Roman_Jarckov23 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование кода из C в PascalABC.NET (символы и строки) - PascalABC.NET ParkerVans Помощь студентам 5 05.12.2017 11:09
PascalABC.Net now2 Помощь студентам 2 27.03.2014 21:03
Как отобразить в окне DDS изображение crymchanin Общие вопросы C/C++ 0 15.02.2012 17:53
Компьютерная игра в окне Dima DDM Gamedev - cоздание игр: Unity, OpenGL, DirectX 11 30.11.2010 19:37


06:47.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru