Deutsch

Кто возьмёт миллион 28.04.2024

1569  
uscheswoi_82 коренной житель28.04.24 15:27
uscheswoi_82
28.04.24 15:27 

Всем привет! Мне скучно, поэтому я решил написать компьютерную игру "кто возьмёт миллион". Решил писать игру в SwishMax 3. Эту игру я ещё разрабатывал в Казахстане но на Visual Basic 6.0 перед отъездом в Германию, т.к. мне было тогда делать нечего см. https://foren.germany.ru/common/f/40860595.html?Cat=&page=.... Буду делать игру постепенно, не сразу. Цель будет Macromedia/Adobe Flash Player 6, чтобы работало на старых компьютерах и в веб браузере. Поскольку у флэша нет возможности встраивать компоненты, как у Visual Basic 6.0 и Visual Studio .NET, но у SwishMax 3 можно вроде как-бы создавать компоненты, и добавлять их в проект. Но у флэша такой функции нет, поэтому мы будем сохранять компоненты как отдельный флэш файл (swf-файл).

1. Нарисуем в Open Office такой интерфейс, и экспортируем в графический формат png (orange.png и blue.png):



2. Добавим тень в Corel PhotoImpact X3:



3. В SwishMax 3 добавим такой интерфейс:



4. В настройках укажем чтобы экспортировать во флэш версии 6:



5. Договоримся голубая кнопка будет называться blue, а оранжевая кнопка orange:



6. Напишим код:

Сам код:

// При загрузки флэша
onSelfEvent (load) {
   var blinking:Boolean = false; // Мигает?
   var ticks:Number = 0; // Тики
   orange._visible = false; // Кнопку оранжевого цвета делаем невидимой
   orange._x = blue._x; // Перемещаем кнопку orange по X-координате, где находится кнопка blue 
   orange._y = blue._y;// Перемещаем кнопку orange по Y-координате, где находится кнопка blue
}
// При перемещение во фрейме
onSelfEvent (enterFrame) {
   // Если нажали на кнопку то мигаем
   if(blinking == true) {
      ticks++; // Увиличием счётчик тика
      // Если прошло 20 тиков, то показываем оранжевую кнопку
      if(ticks >= 20) {
          orange._visible = true; // Показываем кнопку
      }
      // Если прошло 40 тиков, то прячем оранжевую кнопку
      if(ticks >= 40) {
          orange._visible = false; // Прячим оранжевую кнопку
          ticks = 0; // Сбрасываем тики
      }
   }
}


Код, при нажатие, на оранжевую кнопку (orange):

// Если нажали на оранжевую кнопку
on (press) {
   // Если мигает, то останавливаем мигалку, и прячим оранжевую кнопку
   if(blinking == true) {
     blinking = false; // Останавливаем мигалку
     orange._visible = false; // Прячим оранжевую кнопку
   }
}


Код при нажатие, на голубую кнопку (blue):

// Если нажали на голубую кнопку
on (press) {
   // Если мигает, то останавливаем мигалку, и прячим оранжевую кнопку  
   if(blinking == true) {
     blinking = false;// Останавливаем мигалку
     orange._visible = false;// Прячим оранжевую кнопку
     return; // Выходим из оператора if
   }
   
   // Иначе мигаем
   blinking = true; // Мигаем
}


7. Результат работы нашего кода:



Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#1 
uscheswoi_82 коренной житель28.04.24 18:02
uscheswoi_82
NEW 28.04.24 18:02 
в ответ uscheswoi_82 28.04.24 15:27

Теперь следующий шаг, займусь таймером. Короче нужно создать таймер, который будет от 30 до 1 считать, и отображать. Основной цвет текст счётчика и окружности будут оранженвые, но когда счётчик дойдёт до 5, нужно чтобы цвет окружности и текста поменялись на тёмнокрасный. Итак погнали.

1. Так будет выглядеть сцена таймера:



2. Добавим и покрасим окружность и счётчик:

Оранжевая фигура, код цвета #FFE15C или R=255, G=225, B=92:



Красная фигура, код цвета #CC0000 или R=204, G=0, B=0:




У оранжевой фигуры будут названия окружности = round_normal, названия счётчика = timer_normal, а у красной фигуры будут названия окружности = round_timeout, и названия счётчика = timer_timeout.


3. В настройках нужно указать, скорость 1 кадр/сек.:



4. Вот сам код:

// При загрузки флэша
onSelfEvent (load) {
    var ticks:Number = 30; // 30 секунд
    
    timer_timeout._visible = false; // Прячим счётчик красного цвета,
                                    // т.к. его покажим когда счётчик 
                                    // таймера дойдёт до 5
    round_timeout._visible = false; // Прячим окружность красного цвета,
                                    // т.к. егё покажим когда счётчик 
                                    //таймера дойдёт до 5    
    timer_timeout._x = timer_normal._x; // Переносим по X координате
    timer_timeout._y = timer_normal._y; // Переносим по Y координате
    round_timeout._x = round_normal._x; // Переносим по X координате
    round_timeout._y = round_normal._y; // Переносим по Y координате
}

// При перемещение во фрейме
onSelfEvent (enterFrame) {
    timer_normal.text = ticks; // Отображаем для оранжевого цвета 
                               // счётчика, сколько осталось секунд
    timer_timeout.text = ticks; // Отображаем для красного цвета 
                               // счётчика, сколько осталось секунд    

    // Если счётчик не 0, то уменьшаем счётчик на единицу
    if(ticks >= 1) 
      ticks -- ; // уменьшаем счётчик на единицу
    
    // Если счётчик <= 5, то показываем красно
    if(ticks <= 5) {
      timer_timeout._visible = true;
      round_timeout._visible = true;        

      timer_normal._visible = false;
      round_normal._visible = false;        
    }

    // Если счётчик == 0, то выходим из функции
    if(ticks == 0)
      return; // Выходим из функции   
}


5. Вуаля, работает таймер вот так:



Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#2 
uscheswoi_82 коренной житель01.05.24 13:21
uscheswoi_82
NEW 01.05.24 13:21 
в ответ uscheswoi_82 28.04.24 18:02

Всем привет! Продолжу программировать игру "О счастливчик!", ну или "Кто возьмёт миллион?". Итак продолжим, сегодня я буду делать панель, в которой отображается текущий раунд и сколько выиграл уже денег:

1. В Microsot Paint нарисуем такой ромб:



2. Сохраним его в формат PNG, чтобы добавить прозрачный фон. Там где тёмно-красного цвета, там нужно заменить на прозрачный фон:



3. Укажим что тёмно-красный цвет, будет прозрачным:



4. Нарисуем вот так в SwishMax 3:





5. Вот сам код:

onSelfEvent (load) {
    var money_index:Number = 1; // Текущий выигрышь
    // Делаем ромбы не видимыми
    current_money_50euro._visible = false;
    current_money_100euro._visible = false;
    current_money_200euro._visible = false;
    current_money_300euro._visible = false;
    current_money_500euro._visible = false;
    current_money_1000euro._visible = false;
    current_money_2000euro._visible = false;
    current_money_4000euro._visible = false;
    current_money_8000euro._visible = false;
    current_money_16000euro._visible = false;
    current_money_32000euro._visible = false;
    current_money_64000euro._visible = false;
    current_money_125000euro._visible = false;
    current_money_500000euro._visible = false;
    current_money_1mioeuro._visible = false;
}

// При перемещение во фрейме
onSelfEvent (enterFrame) {
  // Показываем ромбы
  if(money_index >= 1) current_money_50euro._visible = true; // Если в money_index >= 1 то показываем белый ромб где 50 евро
  if(money_index >= 2) current_money_100euro._visible = true; // Если в money_index >= 2 то показываем белый ромб где 100 евро
  if(money_index >= 3) current_money_200euro._visible = true; // Если в money_index >= 3 то показываем белый ромб где 200 евро
  if(money_index >= 4) current_money_300euro._visible = true; // Если в money_index >= 4 то показываем белый ромб где 300 евро
  if(money_index >= 5) current_money_500euro._visible = true; // Если в money_index >= 5 то показываем белый ромб где 590 евро
  if(money_index >= 6) current_money_1000euro._visible = true; // Если в money_index >= 6 то показываем белый ромб где 1000 евро
  if(money_index >= 7) current_money_2000euro._visible = true; // Если в money_index >= 7 то показываем белый ромб где 2000 евро
  if(money_index >= 8) current_money_4000euro._visible = true; // Если в money_index >= 8 то показываем белый ромб где 4000 евро
  if(money_index >= 9) current_money_8000euro._visible = true; // Если в money_index >= 9 то показываем белый ромб где 8000 евро
  if(money_index >= 10) current_money_16000euro._visible = true; // Если в money_index >= 10 то показываем белый ромб где 16000 евро
  if(money_index >= 11) current_money_32000euro._visible = true; // Если в money_index >= 11 то показываем белый ромб где 32000 евро
  if(money_index >= 12) current_money_64000euro._visible = true; // Если в money_index >= 12 то показываем белый ромб где 64000 евро
  if(money_index >= 13) current_money_125000euro._visible = true; // Если в money_index >= 13 то показываем белый ромб где 125000 евро
  if(money_index >= 14) current_money_500000euro._visible = true; // Если в money_index >= 14 то показываем белый ромб где 500000 евро
  if(money_index >= 15) current_money_1mioeuro._visible = true; // Если в money_index >= 15 то показываем белый ромб где 1 млн. евро
  
  // Переместить планку, до текущего выигрыша
  switch(money_index) {
  case 1:
    current_money._y = money_50euro._y+12;
  break;
  case 2:
    current_money._y = money_100euro._y+12;
  break;
  case 3:
    current_money._y = money_200euro._y+12;
  break;
  case 4:
    current_money._y = money_300euro._y+12;
  break;
  case 5:
    current_money._y = money_500euro._y+12;
  break;
  case 6:
    current_money._y = money_1000euro._y+12;
  break;
  case 7:
    current_money._y = money_2000euro._y+12;
  break;
  case 8:
    current_money._y = money_4000euro._y+12;
  break;
  case 9:
    current_money._y = money_8000euro._y+12;
  break;
  case 10:
    current_money._y = money_16000euro._y+12;
  break;
  case 11:
    current_money._y = money_32000euro._y+12;
  break;
  case 12:
    current_money._y = money_64000euro._y+12;
  break;
  case 13:
    current_money._y = money_125000euro._y+12;
  break;
  case 14:
    current_money._y = money_500000euro._y+12;
  break;
  case 15:
    current_money._y = money_1mioeuro._y+12;
  break;
  }
}

6. Результат работы программы:



Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#3 
uscheswoi_82 коренной житель07.05.24 14:45
uscheswoi_82
NEW 07.05.24 14:45 
в ответ uscheswoi_82 01.05.24 13:21

Буду пытаться часть игры сделать в Macromedia Flash 8 Professional




Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#4 
uscheswoi_82 коренной житель07.05.24 18:32
uscheswoi_82
NEW 07.05.24 18:32 
в ответ uscheswoi_82 07.05.24 14:45

Я не стал устанавливать Macromedia Flash 8 Professional на Windows 8.1, а установил эту программу в виртуальную машину. В Macromedia Flash 8 Professional есть одно из приемуществ, которого нет в SwishMax 3. В Macromedia Flash 8 Professional если переконвертить геометрические фигуры или текст в кнопку см.:



То в режиме Symbol для кнопки есть 4 состояния ну или события - Up, Over, Down, и Hit, поэтому можно фон и цвет рамки геометрической фигуры перекрасить, а так-же добавить звук для каждого состояни/события см.:



Ну а в SwishMax 3 для каждого стостояния нужно рисовать геометрическую фигуру или текст отдельно, и прятать их.


А вот и результат работы скрипта в флеш плеере, где я покрасил кнопочки в разные цвета, а если быть точнее там градиент, в зависимости состояния/события. Когда при запуске флеш плеера, то показывается кнопка т.е. она будет голубого цвета, если приближаешь курсор мыши к кнопки, кнопка становится оранжевой, а при нажатие на кнопку кнопка становится жёлтой и играет звук, туда я вставил звуковой файл tada.wav:



Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#5 
uscheswoi_82 коренной житель08.05.24 17:22
uscheswoi_82
NEW 08.05.24 17:22 
в ответ uscheswoi_82 07.05.24 18:32

Ещё есть приемущества у Macromedia Flash 8 Professional по сравнению с SwishMax 3 что я могу одну картинку импортировать в библиотеку, и оттуда сколько угодно доставать из библиотеки и перемещать в сцену, возможно Macromedia Flash 8 Professional когда скомпилирует в swf или в exe, то сделает ссылку на одну картинку:



В SwishMax3 можно импортировать в геометрическую фигуру, но я не уверен что он сделает ссылку на картинку, как это возможно сделает Macromedia Flash 8 Professional:



Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#6 
uscheswoi_82 коренной житель08.05.24 17:39
uscheswoi_82
NEW 08.05.24 17:39 
в ответ uscheswoi_82 08.05.24 17:22

Решил сжать эту иконку, выбрал 17 цветов вместо 16.7 миллионов цветов:



с 16.7 миллионов цветов но прозрачным фоном весит такая картинка 312 байт:



С белым фоном эта иконка весит 335 байт, с прозрачным цветом но с 16.7 миллионов цветов весит эта иконкак 312 байт, а с 17 цветами 225 байт. Если флеш в самом деле один раз хранит иконки и фотки, и лишь делает ссылку, то всё равно сколько весит эта иконка, ведь 15 иконок нужно расплодить:



15 иконок x 335 байт = 5025байт, 15 иконок x 312 байт = 4680 байт, 15 иконок x 225 = 3375 байт. Чем меньше меньше весят иконки, пиктограммы, звуки, итд. тем меньше будет размер флеш-фала.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#7 
uscheswoi_82 коренной житель14.05.24 22:11
uscheswoi_82
NEW 14.05.24 22:11 
в ответ uscheswoi_82 08.05.24 17:39

Всем привет, продолжу разрабатывать игру "Кто возьмёт миллион?"/"О счастливчик!", я решил ещё параллельно разрабатывать игру под Windows 3.11.

Вот лицензионный мой компилятор Visual Basic 4.0 Enterprise Edition, он как под Windows 3.11, так и под современные ОС может установиться:



Так-же есть лицензионная версия Windows 3.11:



Вот дискета:



Вот прототип, который я разработал в Visual Basic 4.0:



А вот так работает игра в Window 3.11:



Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#8 
uscheswoi_82 коренной житель16.05.24 22:40
uscheswoi_82
NEW 16.05.24 22:40 
в ответ uscheswoi_82 14.05.24 22:11

Всем привет! Продолжу программировать игру "Кто возьмёт миллион?"/"О счастливчик".

Короче в среде разработка Microsoft Visual Basic 4.0 и в графической оболочки Microsoft Windows 3.1 нет таких API функций как mciSendString, mciSendCommand, и sndPlaySound, они есть только в Visual Basic начиная имхо 5.0 см.:



Но слава богу что в Microsoft Visual Basic 4.0 есть компонент MMControl, он так-же был в Microsoft Visual Basic 6.0.



Чтобы проигрывать звук, нужно налепить компонент MMControl на форму, и написать следующий код, в нашем случае компонент называется MMControl1:

Private Sub Form_Load()
  MMControl1.DeviceType = "Waveaudio"
  MMControl1.filename = "tada.wav"
  MMControl1.Command = "Open"
  MMControl1.Wait = True
  MMControl1.Command = "Prev"
  MMControl1.Command = "Play"
End Sub


Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#9 
uscheswoi_82 коренной житель16.05.24 22:51
uscheswoi_82
NEW 16.05.24 22:51 
в ответ uscheswoi_82 16.05.24 22:40

Ещё одна неприятность ожидает в графической оболочки Microsoft Windows 3.1, то что там нельзя проигрывть несколько аудиофайлов одновременно, проигрывть несколько аудиофайлов одновременно Microsoft Windows научился примерно с версии 98SE. Возможно это связанно как-то с архитектурой Windows.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#10 
uscheswoi_82 коренной житель16.05.24 23:47
uscheswoi_82
NEW 16.05.24 23:47 
в ответ uscheswoi_82 16.05.24 22:51

От лекарства меня потянуло в сон, пойду полежу в постели, и поглажу моих мишку и собачку. Потом продолжу программировать и делиться как программировал.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#11 
uscheswoi_82 коренной житель19.05.24 01:22
uscheswoi_82
NEW 19.05.24 01:22 
в ответ uscheswoi_82 16.05.24 23:47

Продолжем болтавню и программирование нашей игры. При разработке игры на Microsoft Visual Basic 4.0 для Windows 3.11 мы не будем использовать базу данных и DAO, вместо этого все вопросы запишим в бинарный файл, вот полный код записи вопросов на Visual Basic 4.0:

Private Type DATABASE
    question As String * 255
    answ1 As String * 50
    answ2 As String * 50
    answ3 As String * 50
    answ4 As String * 50
    answer As Integer
End Type
Private Sub Form_Load()
    Dim q As DATABASE
    Open "questions.bin" For Random As #1 Len = Len(q)
    q.question = "Question"
    q.answ1 = "Answer 1"
    q.answ2 = "Answer 2"
    q.answ3 = "Answer 3"
    q.answ4 = "Answer 4"
    q.answer = 1
    Put #1, 1, q
    q.question = "Вопрос"
    q.answ1 = "Ответ 1"
    q.answ2 = "Ответ 2"
    q.answ3 = "Ответ 3"
    q.answ4 = "Ответ 4"
    q.answer = 3
    Put #1, 2, q
    Close #1
End Sub


Объясняю как работает код, это структура данных, данные которые мы сериализуем и запишим в файл, question - тут будет хранится вопрос, у него длина 255 символов, answ1 по anws4, там будут храниться 4 варианта ответа, их длина по 50 символов, answer - там будет хранится правельный ответ:

Private Type DATABASE
    question As String * 255
    answ1 As String * 50
    answ2 As String * 50
    answ3 As String * 50
    answ4 As String * 50
    answer As Integer
End Type


Когда программу запустим, произойдёт запись в файл questions.bin, который будет выглядеть следующим образом, все данные сохраняются в бинарном виде:



Когда настроение появится, позже покажу десерелизацию, т.е. чтения вопросов, и ответов из файла questions.bin. А ещё позже покажу как зашифровать вопросы и ответы, чтобы не подглядовали ответы.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#12 
uscheswoi_82 коренной житель19.05.24 01:49
uscheswoi_82
NEW 19.05.24 01:49 
в ответ uscheswoi_82 19.05.24 01:22

Во флеше можно конечно получить по GET и хранить вопросы на серверы, но можно создать массив, в SwishMax 3 нужно делать так:

onSelfEvent (load) {
    var arrQuestions:Array = new Array;
    arrQuestions.push({question:"Question 1", answ1:"Answer 1", answ2:"Answer 2", answ3:"Answer 3", answ4:"Answer 4", answer:1});
    arrQuestions.push({question:"Question 2", answ1:"Answer 1", answ2:"Answer 2", answ3:"Answer 3", answ4:"Answer 4", answer:2});
}


А в Macromedia Flash 8 Professional на AcrionScript 2 тоже так:

var arrQuestions:Array = new Array;
arrQuestions.push({question:"Question 1", answ1:"Answer 1", answ2:"Answer 2", answ3:"Answer 3", answ4:"Answer 4", answer:1});
arrQuestions.push({question:"Question 2", answ1:"Answer 1", answ2:"Answer 2", answ3:"Answer 3", answ4:"Answer 4", answer:2});
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#13 
uscheswoi_82 коренной житель20.05.24 01:13
uscheswoi_82
NEW 20.05.24 01:13 
в ответ uscheswoi_82 19.05.24 01:49

Всем привет! Продолжим демогогию насчёт программирование игры. Короче по моим подсчётам на 16 битной версии Windows 3.11 эта структура будет весить для одного вопроса где-то 457 байт, если будет допустим 1000 вопросов, то будет весить 455 тыщ байт:

Private Type DATABASE
    question As String * 255
    answ1 As String * 50
    answ2 As String * 50
    answ3 As String * 50
    answ4 As String * 50
    answer As Integer
End Type



Надо подумать об защите, чтобы пользователи несмогли подсмотреть правильные ответы, и чтобы вопросы и ответы не перекопировали. Есть несколько способов зашифровать. Вот некоторые из них:


  • Chr(Abs(255 - Asc("A")))
    
        

  • Dim str1 As String
    Dim Str2 As String
    Dim i As Integer
    str1 = "Hello Test"
    str2 = ""
    For i = Len(str1) To 1 Step -1
      str2 = str2 & Mid(str1, i, 1)
    Next i
    MsgBox str2
        
  • Разделить на блоки, и перемешать в неправильном порядке, ну этот способ я постараюсь написать чуть попозже, может сегодня, может завтра.
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#14 
uscheswoi_82 коренной житель20.05.24 03:58
uscheswoi_82
NEW 20.05.24 03:58 
в ответ uscheswoi_82 20.05.24 01:13

Чтобы текст несмогли прочесть, нужно разделить текстовую строку на блоки, т.е. на n-байтов, или n-символов. Допустим если длина строки 200, то допустим можно разделить на 40, то каждый блог будет по 5 символов. Как такой алгоритм работает?

1. Сначало программа генерирует случайные числа от 1 до 6, причём числа не должны повторяться.

Получится что-то вроде такого:

5, 6, 2, 4, 3, 1


2. Потом разрезаем текстовую строку на блоки. К примеру, вот текстовая строка "Всем привет! Я ещё не сплю..."

А получится вот так:

"Всем ","приве", "т! Я ", "ещё не", "сплю.", "..".


Но если отсортировать блоки в той последовательности, в которой я показал выше, точнее вот этой:

5, 6, 2, 4, 3, 1, 6


То должно получится вот так:

"сплю.", "..", "приве", "ещё не", "т! Я ", "Всем ".


Т.е. в бинарном файле будет так:




Если указывать ссылку на следующий блок, то будет выглядеть так:

"7,  ", "3, сплю.", "..", "6, приве", "2,ещё не", "5,т! Я ", "4,Всем ".


А вот так будет работать алгоритм:

Программа видет вначале строки число 7, значит сразу перейдёт на 7-й блок, оттуда считает буквы "Всем ", потом перепрыгнет на 4-й блок, и оттуда считает буквы "приве", потом перепрыгнет на 6-й блок, и оттуда считает буквы "т!, Я ", потом перепрыгнит на 2-й блок и считает "сплю.", а потом перепрыгнит на 3-й блок, и считает "..". Когда я практику проходил, именно так я шифровал картинки изображения.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#15 
uscheswoi_82 коренной житель20.05.24 04:55
uscheswoi_82
NEW 20.05.24 04:55 
в ответ uscheswoi_82 20.05.24 03:58

Ещё хотел бы добавить, в последнем блоке, нужно указать допустим -1, тогда программа будет знать что это конец блока, и не нужно дальше куда-то перескакивать, т.е. будет выклядеть вот так:

"7,  ", "3, сплю.", "-1,..", "6, приве", "2,ещё не", "5,т! Я ", "4,Всем ".
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#16 
uscheswoi_82 коренной житель21.05.24 00:25
uscheswoi_82
NEW 21.05.24 00:25 
в ответ uscheswoi_82 20.05.24 04:55

Всем привет, продолжаем программировать.

Короче чтобы сгенерировать случайные числа без повторения, нужно написать следующий код:

Const sz = 7
Dim arrnumbers(sz) As Integer
Dim temp As Integer
Private Sub Form_Load()
  Debug.Print "----"
  Randomize Timer
  For i = 0 To sz
        temp = Int(Rnd() * i + 1)
        If temp <> i Then arrnumbers(i) = arrnumbers(temp)
        arrnumbers(temp) = i
    Next i
    For i = 0 To sz
        Debug.Print arrnumbers(i)
    Next i
End Sub


Результат будет:

----
 0 
 2 
 1 
 6 
 5 
 7 
 4 
 3

Это то, что нам надо!

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#17 
uscheswoi_82 коренной житель22.05.24 01:39
uscheswoi_82
NEW 22.05.24 01:39 
в ответ uscheswoi_82 21.05.24 00:25, Последний раз изменено 22.05.24 02:41 (uscheswoi_82)

Всем привет, продолжаем делать игру. Сегодня сделал редактор вопросов на Visual Basic 4.0, но пока читает из файла вопросы, сохраниеие сделаю позже, вот сама форма:



А вот результат работы программы, так выглядет программа запущенная в Windows 3.11:



Если нажать файл->Открыть, то появится такое диалоговое окно:



После открытия файла, спрашивает сколько отобразить вопросов:



Вуаля! Загрузились наши вопросы, с ответами:



А вот сам код, как выше писал, что сохранение в файл сделаю позже:

Private Type DATABASE
    question As String * 255
    answ1 As String * 50
    answ2 As String * 50
    answ3 As String * 50
    answ4 As String * 50
    answer As Integer
End Type

Private strFileName As String

Private Sub add(ByVal strFileName As String, ByVal index As Integer, db As DATABASE)
  Open "questions.bin" For Random As #1 Len = Len(db)
  Put #1, index, db
  Close #1
End Sub

Private Sub read(ByVal strFileName As String, ByVal index As Integer, db As DATABASE)
  Open "questions.bin" For Random As #1 Len = Len(db)
  Get #1, index, db
  Close #1
End Sub

Private Sub Form_Load()
  Me.Left = 0
  Me.Top = 0

End Sub 

Private Sub lstQuestions_Click()
  Dim db As DATABASE
  read strFileName, Me.lstQuestions.ListIndex + 1, db
  Me.txtQuestion.Text = db.question
  Me.txtAnsw1.Text = db.answ1
  Me.txtAnsw2.Text = db.answ2
  Me.txtAnsw3.Text = db.answ3
  Me.txtAnsw4.Text = db.answ4
  Me.txtAnswRight.Text = db.answer
End Sub

Private Sub popupOpen_Click()
  Dim db As DATABASE
  Dim q As Long
  With CommonDialog1
    .DialogTitle = "Открыть файл"
    .Filter = "Все файлы (*.*)|*.*"
    .ShowOpen
    q = InputBox("Сколько вопросов?", "Загрузка вопросов", 1)
    strFileName = .filename
    For i = 1 To q
      read .filename, i, db
      Me.lstQuestions.AddItem db.question
    Next i
  End With
End Sub

Private Sub popupExit_Click()
  Unload Me
End Sub
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#18 
uscheswoi_82 коренной житель27.05.24 07:27
uscheswoi_82
NEW 27.05.24 07:27 
в ответ uscheswoi_82 22.05.24 01:39, Последний раз изменено 27.05.24 07:29 (uscheswoi_82)

Только что усовершенствовал редактор вопросов, теперь можно добавлять новую запись, и даже сохранять вопросы и ответы в файл, так-же подправил заголовок окна, "Редактор вопрос для игры Кто возьмёт миллион?", сейчас так "Редактор вопросов для игры Кто возьмёт миллион?", так-же если при загрузки ввести 0 сообщений, то :


Добавил три кнопки, слева направо добавить вопрос, сохранить вопрос, удалить вопрос. Иконки плюсика, дискеты, и мусорного ведра брал стандартные, которые идут с Microsoft Visual Basic 4.0. Вот свежий код:

Private Type DATABASE
    question As String * 255
    answ1 As String * 50
    answ2 As String * 50
    answ3 As String * 50
    answ4 As String * 50
    answer As Integer
End Type

Private strFileName As String
Private intCnt As Integer
Private Sub add(ByVal strFileName As String, ByVal index As Integer, db As DATABASE)
 Open "questions.bin" For Random As #1 Len = Len(db)
 Put #1, index, db
 Close #1
End Sub

Private Sub read(ByVal strFileName As String, ByVal index As Integer, db As DATABASE)
 Open "questions.bin" For Random As #1 Len = Len(db)
 Get #1, index, db
 Close #1
End Sub

Private Sub cmdNew_Click()
    Me.lstQuestions.AddItem "Новый вопрос"
End Sub

Private Sub cmdSave_Click()
    On Error Resume Next
    Dim db As DATABASE
    db.question = Me.txtQuestion.Text
    db.answ1 = Me.txtAnsw1.Text
    db.answ2 = Me.txtAnsw2.Text
    db.answ3 = Me.txtAnsw3.Text
    db.answ4 = Me.txtAnsw4.Text
    db.answer = CInt(Me.txtAnswRight.Text)
    add strFileName, Me.lstQuestions.ListIndex + 1, db
End Sub

Private Sub Form_Load()
    Me.Left = 0
    Me.Top = 0
End Sub

Private Sub lstQuestions_Click()
  Dim db As DATABASE
  read strFileName, Me.lstQuestions.ListIndex + 1, db
  Me.txtQuestion.Text = db.question
  Me.txtAnsw1.Text = db.answ1
  Me.txtAnsw2.Text = db.answ2
  Me.txtAnsw3.Text = db.answ3
  Me.txtAnsw4.Text = db.answ4
  Me.txtAnswRight.Text = db.answer
End Sub

Private Sub popupExit_Click()
    Unload Me
End Sub

Private Sub popupOpen_Click()
On Error Resume Next
Dim db As DATABASE
Dim q As Long
    With CommonDialog1
      .DialogTitle = "Открыть файл"
      .Filter = "Все файлы (*.*)|*.*"
      .ShowOpen
Try:
      q = InputBox("Сколько вопросов?", "Загрузка вопросов", 1)
      If q < 1 Then
        MsgBox "Вопрос должен хотя бы один"
        GoTo Try
      End If
      
      strFileName = .filename
      For i = 1 To q
        read .filename, i, db
        'read(strFilename As String, index As Integer, db As DATABASE)
        Me.lstQuestions.AddItem db.question
      Next i
    End With
End Sub

'Private Sub popupSave_Click()
'    With CommonDialog1
'      .DialogTitle = "Сохранить файл"
'      .Filter = "Все файлы (*.*)|*.*"
'      .ShowSave
      '.filename
'    End With
'End Sub
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#19 
uscheswoi_82 коренной житель28.05.24 08:26
uscheswoi_82
NEW 28.05.24 08:26 
в ответ uscheswoi_82 27.05.24 07:27

Давайте продолжим программировать нашу игру. Сейчас только что усовершенствовал программу редактор вопросов для игры "Кто возьмёт миллион?", теперь можно экспортировать во флеш, вот код:

Private Sub popupExportFlash_Click()
On Error Resume Next
Dim db As DATABASE
Dim strFlash As String
    strFlash = "var arrQuestions:Array = new Array;"
    For i = 1 To Me.lstQuestions.ListCount
        read strFileName, i, db
        strFlash = strFlash & vbCrLf & "arrQuestions.push({question:" & Trim(db.question)
        strFlash = strFlash & ",answ1: " & Chr(34) & Trim(db.answ1) & Chr(34) & ","
        strFlash = strFlash & "answ2:" & Chr(34) & Trim(db.answ2) & Chr(34) & ","
        strFlash = strFlash & ",answ3:" & Chr(34) & Trim(db.answ3) & Chr(34) & ","
        strFlash = strFlash & ",answ4:" & Chr(34) & Trim(db.answ4) & Chr(34) & ","
        strFlash = strFlash & ",answer:" & db.answer & "});"
    Next i
    Clipboard.SetText strFlash
    MsgBox "Ñêîïèðîâàíî " & strFlash & "â áóôåð îáìåíà!"
End Sub


И подправил код при нажате на список вопросов, я добавил функцию Trim, которая удаляет ненужные пробелы:

Private Sub lstQuestions_Click()
  Dim db As DATABASE
  read strFileName, Me.lstQuestions.ListIndex + 1, db
  Me.txtQuestion.Text = db.question
  Me.txtAnsw1.Text = Trim(db.answ1)
  Me.txtAnsw2.Text = Trim(db.answ2)
  Me.txtAnsw3.Text = Trim(db.answ3)
  Me.txtAnsw4.Text = Trim(db.answ4)
  Me.txtAnswRight.Text = db.answer
End Sub


Результат работы программы:

var arrQuestions:Array = new Array;
arrQuestions.push({question:Question,answ1: "Answer 1"answ2:"Answer 2",answ3:"Answer 3",answ4:"Answer 4",answer:1});
arrQuestions.push({question:Вопрос,answ1: "Ответ 1"answ2:"Ответ 2",answ3:"Ответ 3",answ4:"Ответ 4",answer:3});
arrQuestions.push({question:GGGGG,answ1: "1"answ2:"2",answ3:"3",answ4:"4",answer:1});

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Дневник тяжелобольного инвалида
#20