Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/26: Рейтинг темы: голосов - 26, средняя оценка - 5.00
qqww

CSharp и Игра "Жизнь"

16.04.2010, 01:28. Показов 5442. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Загорелся желанием попробовать C# и решил переписать одну из своих лабораторных
работ

Файл программы lab3pr.exe лежит в прикрепленном архиве.
Инструкция:
1. Жмем draw.
2. Кликаем по сетке.
3. Жмем Жизнь.
Для редактирования жмем кнопку "Редактировать".

Delphi
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
unit lab3;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;
 
type
  TForm1 = class(TForm)
    Timer: TTimer;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure TimerTimer(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  x0, y0, a, b, c : integer;
  mas, masF : array[0..31,0..31] of boolean;
  sw : boolean;
 
implementation
 
{$R *.dfm}
 
procedure Life();
var i, j, k, n : integer;
var count : word;
begin
    //Блок прохода по массиву
    for j := 1 to c do begin
        for i := 1 to b do begin
            //Блок проверки на рядомстоящих
            count := 0;
            for n := j-1 to j+1 do begin
                for k := i-1 to i+1 do begin
                    if (j = n) and (i = k) then continue;
                    if mas[k,n] then count := count + 1;
                end;
            end;
            //Блок исхода
            if (mas[i,j] = false) and (count = 3) then masF[i,j] := true
            else if (mas[i,j] = true) and ((count = 2) or (count = 3)) then masF[i,j] := true
            else masF[i,j] := false;
        end;
    end;
    //Блок подготовки к след. шагу
    for j := 1 to b do begin
        for i := 1 to c do begin
            mas[i,j] := masF[i,j];
        end;
    end;
end;
 
procedure Draw(); //Рисуем сетку и клетки
var i, j, x, y : integer;
begin
  a := 15; b := 30; c := 30;
  // a - длина ребер квадрата
  // b - кол-во квадратов в ширину, c - в высоту
  x0 := 25; y0 := 25;
  // x0 - начальная точка по х, y0  - по y
  x := x0; y := y0;
    for j := 1 to b do
    begin
        x := x0;
        for i := 1 to c do begin
            form1.Canvas.Polygon([Point(x,y),Point(x+a,y),
                Point(x+a,y+a),Point(x,y+a)]);
            if (mas[i,j]) then form1.Canvas.Ellipse(x+1,y+1,x+a,y+a);
            //else if (masF[i,j]) and (sw = false) then form1.Canvas.Ellipse(x+1,y+1,x+a,y+a);
            x := x0 + (i * a);
        end;
        y := y0 + (j * a);
    end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
sw := true;
button1.Enabled := false;
button2.Enabled := true;
timer.Enabled := false;
end;
 
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var xP, yP : integer;
begin
  a := 15;
  if (button = mbLeft) and (sw = true) then begin
 
    xP := (X - 25) div a;
    yP := (Y - 25) div a;
    mas[xP+1,yP+1] := true;
    draw;
  end;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
sw := true;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
sw := false;
button2.Enabled := false;
button1.Enabled := true;
timer.Enabled := true;
end;
 
procedure TForm1.TimerTimer(Sender: TObject);
var i, j : integer;
begin
Life;
Draw;
end;
 
procedure TForm1.Button3Click(Sender: TObject);
begin
draw;
end;
 
end.
написанную на Dеlphi. Называется она Игра "Жизнь". В стиле ООП я еще пока не думаю и разбираюсь с классами туго, решил спросить как он (класс) будет выглядеть.
Набросок
таков
C#
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
 
namespace Conways_Game_of_Life
{
    class LifeClass
    {
        bool[,] Grid = new bool[32,32];
        Bitmap bmp = new Bitmap(353, 353);
 
        public static void StartDraw(Bitmap b)
        {
            //рисуем начальную сетку на bitmap bmp, в C++ бы наверно указатель передавался.
 
        }
 
        public void Life(Array a, Bitmap b)
        {
            //тут идут шаги самого алгоритма жизни
        }
 
        //еще один метод для расстановки клеток на сетке
 
    }
}
. С Bitmap работать как совершенно не знаю, но рисовать посоветовали именно так. Т.е. рисуем в памяти все кружочки собранные из массива и вставляем этот рисунок в PaintBox.
Вложения
Тип файла: zip Game of Life Delphi.zip (202.1 Кб, 171 просмотров)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.04.2010, 01:28
Ответы с готовыми решениями:

Игра Жизнь на C#(game of life)
Кто может помочь в создании игры жизнь в С#(game of life)

Игра "Борьба за жизнь": доработать проект
Правила игры: два игрока имеют по n шашек и играют в поле m*m, делая ходы по очереди. Возможные ходы: 1. Переставить свою шашку на...

Игра "Жизнь"
Доброго времени суток! Не могу найти ошибку, игра работает неверно! Нужно эмитировать жизнь клеток в чаше. т.е. пользователь...

1
 Аватар для kuroiryuu
328 / 312 / 68
Регистрация: 05.11.2009
Сообщений: 712
16.04.2010, 09:19
Для начала, Delphi тоже ООП, так что вам просто необходимо перевести ваш старый проект с паскаля на С#.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.04.2010, 09:19
Помогаю со студенческими работами здесь

Игра «Жизнь»
Написать программу, демонстрирующую работу с объектами двух типов: O1 – игрок, O2 – автоматический игрок, О3 – рейтинговая таблица...

Игра Жизнь - нужен пример
Может кто то кодом поделиться ?

Как слепить? Игра Жизнь
Задание вот в чём: Сделать Игру Жизнь Джона Конуэя в Windows form, при этом используя по возможности только picture box'ы либо минимальное...

Игра жизнь: как сделать отрисовку поколений
Добрый день, пытаюсь написать игру жизнь, но есть маленькая проблема с отрисовкой поколений есть метод public RenderTargetBitmap...

Игра Жизнь пиксельный метод. SetPixel,GetPixel тормозит
Добрый день, Форумчани. С друзьями решили реализовать "игра жизнь"(смотреть на википедии кто не знает) на разных платформах изхищренными...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru