Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 26.12.2013
Сообщений: 5
1

Реакция на клик мышью, чтобы в игре "жизнь" забивать начальную конфигурацию

13.02.2014, 22:03. Просмотров 1393. Ответов 1
Метки нет (Все метки)

Сделал "жизнь", но пока вбивать начальную конфигурацию приходится, вводя координаты, а хочется просто кликнуть в нужную клетку, вот и прошу помощи. В интернете смотрел, но как-то непонятно.

П.С. Знаете ли конфигурацию "звезды" (если она есть). И, если не сложно, покидайте долгожителей
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.02.2014, 22:03
Ответы с готовыми решениями:

Проект "Реакция" (ловить шарики одинаковых размеров мышью)
Должны появляться шарики одинаковых размеров, по ним нажимать мышкой и они пропадают(ловятся), а...

Игра "Жизнь": найти конфигурацию клеток, которая будет через k поколений от заданного
Игра «Жизнь» была придумана английским математиком Джоном Конвейем в 1970 году. Впервые описание...

Реакция на клавиатуру в игре "Змейка"
Здравствуйте, совсем недавно начал разбираться с формами, пробую написать змейку, логику понимаю,...

Кнопка "стоп" в игре жизнь
Помогите сделать кнопку стоп using System; using System.Collections.Generic; using...

1
1642 / 1071 / 1081
Регистрация: 03.07.2013
Сообщений: 4,507
14.02.2014, 08:54 2
Лучший ответ Сообщение было отмечено Georg-shv как решение

Решение

OnMouseDown, OnMouseMove-во время запуска при движении мышкой (или нажатия) над окном вылетает ошибка

Добавлено через 1 минуту
Мой окончательный вариант:
Кликните здесь для просмотра всего текста
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
uses GraphABC;
 
Const
  MaxKl = {1000}0;
  DelaySleep = 1;
  WinPosX = 50;
  WinPosY = 30;
  R = 5; { радиус клетки }
  WinX = 1100; { размер поля }
  WinY = 900;  {             }
  Wx = (WinX div (R*2+1))*(R*2+1); { размер поля, выровненный по размеру радиусу клеток }
  Wy = (WinY div (R*2+1))*(R*2+1); { точек                                              }
  Vx = Wx div (R*2+1);  { виртуальные размеры поля }
  Vy = Wy div (R*2+1);  { клеток                   }
 
Var
  i,j : Integer;
  key  : Boolean;
  
Function Vir(xy : Integer) : Integer;
Begin
  Vir:=(xy div (R*2+1))+1;
End;
 
Function Rea(xy : Integer) : Integer;
Begin
  Rea:=xy*(R*2+1)-R;
End;
 
Procedure DrawCir(xv,yv: integer; c : Color);
Begin
  Pen.Color:=c;
  Brush.Color:=c;
  Circle(Rea(xv),Rea(yv),R);
End;
 
Function GetKl(xxv,yyv : Integer) : Color;
Begin
  GetKl:=GetPixel(Rea(xxv),Rea(yyv));
End;
 
Function GetNSosed(xv,yv : Integer) : Byte;
  Function Norm(aa,bb : Integer) : Byte;
  Var a,b : Integer;
  Begin
    a:=aa; b:=bb;
    If aa<1 then a:=Vx;
    If aa>Vx then a:=1;
    If bb<1 then b:=Vy;
    If bb>Vy then b:=1;
    If (GetKl(a,b).name='ffffffff') or (GetKl(a,b).name='ff008000') then Norm:=0 else Norm:=1;
  End;
Begin
  GetNSosed:=Norm(xv-1,yv-1)+Norm(xv,yv-1)+Norm(xv+1,yv-1)+
             Norm(xv-1,yv)+                Norm(xv+1,yv)+
             Norm(xv-1,yv+1)+Norm(xv,yv+1)+Norm(xv+1,yv+1);
End;
  
procedure MouseDown(x,y,mb: integer);
begin
  If not key then
  begin
   if mb=1 then DrawCir(Vir(x),Vir(y),clBlue) else
     if mb=2 then DrawCir(Vir(x),Vir(y),clWhite);
  Redraw;
  end;
end;
 
procedure MouseMove(x,y,mb: integer);
Begin
 If not key then
 begin
  if mb=1 then DrawCir(Vir(x),Vir(y),clBlue) else
    If mb=2 then DrawCir(Vir(x),Vir(y),clWhite);
  Redraw;
 end;
end;
 
Procedure KeyPress(ch : char);
Begin
  If Ch=' ' then key:=not key else
    If Ch=#27 then Halt;
End;
 
begin
  SetWindowCaption(' Life is life ');
  // Привязка обработчиков к событиям
  OnMouseDown := MouseDown;
  OnMouseMove := MouseMove;
  OnKeyPress  := KeyPress;
  
  Window.SetPos(WinPosX,WinPosY);
  Window.SetSize(Wx,Wy);
  key:=False;
  
  LockDrawing; 
  Pen.Color:=clBlue;
  Brush.Color:=clBlue;
  
  {clRed   ffff0000}
  {clBlue  ff0000ff}
  {clGreen ff008000}
  {clWhite ffffffff}
  {clYellow ff00ffff}
  
  {
  DrawCir((Vx div 2)-4+1,(Vy div 2)-4+2,clBlue);
  DrawCir((Vx div 2)-4+2,(Vy div 2)-4+2,clBlue);
  DrawCir((Vx div 2)-4+2,(Vy div 2)-4+1,clBlue);
  DrawCir((Vx div 2)-4+3,(Vy div 2)-4+1,clBlue);
  DrawCir((Vx div 2)-4+3,(Vy div 2)-4+3,clBlue);
  }
  DrawCir((Vx div 2)-4+7,(Vy div 2)-4+1,clBlue);
  DrawCir((Vx div 2)-4+7,(Vy div 2)-4+2,clBlue);
  DrawCir((Vx div 2)-4+8,(Vy div 2)-4+2,clBlue);
  DrawCir((Vx div 2)-4+8,(Vy div 2)-4+3,clBlue);
  DrawCir((Vx div 2)-4+6,(Vy div 2)-4+3,clBlue);
  {
  DrawCir((Vx div 2)-4+6,(Vy div 2)-4+6,clBlue);
  DrawCir((Vx div 2)-4+6,(Vy div 2)-4+8,clBlue);
  DrawCir((Vx div 2)-4+7,(Vy div 2)-4+8,clBlue);
  DrawCir((Vx div 2)-4+7,(Vy div 2)-4+7,clBlue);
  DrawCir((Vx div 2)-4+8,(Vy div 2)-4+7,clBlue);
  
  DrawCir((Vx div 2)-4+1,(Vy div 2)-4+6,clBlue);
  DrawCir((Vx div 2)-4+1,(Vy div 2)-4+7,clBlue);
  DrawCir((Vx div 2)-4+2,(Vy div 2)-4+7,clBlue);
  DrawCir((Vx div 2)-4+2,(Vy div 2)-4+8,clBlue);
  DrawCir((Vx div 2)-4+3,(Vy div 2)-4+6,clBlue);}
  
  Randomize;
  For i:=1 to MaxKl do DrawCir(Random(Vx)+1,Random(Vy)+1,clBlue);
 
  Redraw;
  
Repeat
 While key do
 Begin
  For i:=1 to Vx do
   For j:=1 to Vy do
     If GetKl(i,j).name = 'ffffffff' then
     Begin
       Repeat Until Key;
       If GetNSosed(i,j)=3 then DrawCir(i,j,clGreen);
     End  
      else
      Begin
        Repeat Until Key;
        If GetNSosed(i,j) in [0,1,4..8] then DrawCir(i,j,{clRed}clYellow);
      End;
  Redraw;
 { sleep(DelaySleep);}
    For i:=1 to Vx do
     For j:=1 to Vy do
     Begin
       Repeat Until Key;
       If GetKl(i,j).name = {'ffff0000'}'ffffff00' then DrawCir(i,j,clWhite) else
        If GetKl(i,j).name = 'ff008000' then DrawCir(i,j,clBlue);
     End;   
  Redraw;
  sleep(DelaySleep);
  End;
Until False;
end.


Добавлено через 1 минуту
http://ru.cybernetics.wikia.co... 0%D0%B0%29
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.02.2014, 08:54

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Потерянные клетки в игре "Жизнь"
Написал игру &quot;Жизнь&quot; на паскале http://ru.wikipedia.org/wiki/%D0%98%...B7%D0%BD%D1%8C , все вроде...

Клик мышью "сквозь" форму
Всем доброго утра! Вчера скачал прогу AClok - часы, написаны на vb.net и c#. Выбираешь функцию...

Игра "Жизнь"; Нужно, чтобы первое поколение задавалось оператором (с клавиатуры)
Нужна помощь с решением задачи &quot;Жизнь&quot; на с++ Есть код программы, которая задает первое поколение...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.