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

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

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

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

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

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

В какую конфигурацию переведет машина начальную конфигурацию q11*1
6. Машина Тьюринга задана следующей программой: q\а 1 Λ * q1 q11R q1λR q21R...

Как в игре Wings of Prey сделать чтобы самолет управлялся мышью?
Как сделать чтобы в игре Wings of Prey управление полетом самолета осуществлялось мышкой а не...

В игре "Жизнь" надо отметить клетки, где хоть раз была жизнь (Java)
Вот сама игра, где что поменять чтоб места где была жизнь отмечались ? import java.util.Random;...

Реакция на клик мышки
Доброй день всем форумчанам. Я начинающий, прошу помощи у всех кто знает. Вопрос вот в чем. ...

1
1646 / 1075 / 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
14.02.2014, 08:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.02.2014, 08:54
Помогаю со студенческими работами здесь

Реакция окон на клик
Задание: сделать так, чтобы по клику в overlapped курсор переходил в дочернее и делал его активным,...

Реакция кнопки на клик
Вот часть кода: private void button2_Click(object sender, EventArgs e) { ...

Распечатать начальную конфигурацию расстановку, занятость и направление движения лифтов
Помогите решить задачу: В доме N этажей и три лифта. Каждый лифт может быть свободным или...

Полноценная реакция User Control на клики мышью
Подскажите, пожалуйста, как сделать таким образом: Мною созданный UserControl содержит несколько...

Реакция на клик мыши по фигуре
Добрый день, форумчане) Вопрос у меня по глюту появился. Для написания простенькой игры нужно...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru