Форум программистов, компьютерный форум, киберфорум
Наши страницы

XNA/MonoGame

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Lucky701
0 / 0 / 0
Регистрация: 05.06.2011
Сообщений: 55
#1

Игра Жизнь - XNA

15.11.2011, 13:55. Просмотров 1282. Ответов 4

Помогите реализовать игру "Жизнь" на C# в псевдотрехмерном варианте или может у кого то есть реализованная.. Большое Всем спасибо за помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2011, 13:55
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Игра Жизнь (XNA):

игра - Графика и игры
кажись я попал куда надо... мне нужно вскрыть файлы из игры на Jaguar CD,возможно-ли это?

topdawn игра - XNA
На шаре лежал проект topdawn стрелялки (вид сверху). Скачал, но не смог скомпилировать. Что следует исправить что бы проект запускался на...

Игра танграм - Графика и игры
День добрый всем форумчанам! Решился написать легендарную игру Танграм (на iOS). Но как сел изучать всевозможний материал по ней,...

Игра на языке С - Графика и игры
Здравствуйте, в ВУЗе скоро начнем учить Си, интересует возможно ли на Си написать игру с более-мение неплохой графикой (2Д вполне...

Игра Уголки - Графика и игры
Набросал на досуге игру "уголки" на C# с простеньким AI. 8-) Ещё немного не до конца доделал. Например, не определяется конец игры... ...

Бесконечная игра - Графика и игры
Я где-то читал что раньше была игра переносная (как тамогочи только не томагочи а летать на корабле там надо было) и программа у этой игры...

4
Sequd
80 / 79 / 3
Регистрация: 03.11.2009
Сообщений: 723
15.11.2011, 17:09 #2
У вас проблема с алгоритмом или же с реализацией его? Что именно не получается?
2
Lucky701
0 / 0 / 0
Регистрация: 05.06.2011
Сообщений: 55
16.11.2011, 13:11  [ТС] #3
у меня реализовано для двухмерного варианта:
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
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
165
166
167
168
169
170
171
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
 
namespace Life
{
    
    public partial class Form1 : Form
    {
        private bool stopFlag = false; //переключатель конца игрового процесса
        private bool[,] massBool = new bool[50, 50]; //массив значений мертвый-живой для ячеек игрового поля
        private bool[,] massBoolTemp = new bool[50, 50]; // Массив временных значений
        private Button[,] massButton = new Button[50, 50]; // Массив кнопок-ячеек игрового поля
        private int generation = 0; //Счетчик поколений
        
        const int buttonLength = 10;
        Size buttonSize = new Size(buttonLength , buttonLength );
        const int margin = 30;
        const int maxValue = 50;
        const int breakPointGeneration = 100;
 
        public Form1()
        {   
            InitializeComponent();
           //создаем игровое поле
 
            for (int i = 0; i < maxValue ; i++)
            {
                for (int j = 0; j < maxValue ; j++)
                {                  
                    massButton[i, j] = new Button();
                    massButton[i, j].Size = buttonSize;
                    massButton[i, j].Location = new Point(i * buttonLength  + i * 2 + margin , j * buttonLength  + j * 2 + margin );
                    massButton[i, j].Click += new System.EventHandler(this.MassButtonClick);
                    massButton[i, j].Tag = new Coords(i, j); // .Tag для привязки кнопок-ячеек к массиву значений мертвый-живой  
                    massButton[i, j].FlatStyle = FlatStyle.Flat;
                    this.Controls.Add(massButton[i, j]);
 
                }
            }
            
            NewLife();
        }
       
        //Нажатием на кнопки-ячейки задаем первоначальное расположение особей
        private void MassButtonClick(object sender, EventArgs e)
        {
            Button btn = (Button)sender;
            Coords co=(Coords)btn.Tag ;
            btn.BackColor=Color.White;
            massBool[co.I, co.J] = true;
        }
       
         //Нажатие кнопки GO запускаем игровой процесс в отдельном потоке
        private void GoButtonClick(object sender, EventArgs e)
        {
            Thread LifeThread = new Thread(GoLife);
            LifeThread.Start();
        }
        //нажатием кнопки Clear устанавливаем переключатель конца игрового процесса
        private void ClearButtonClick(object sender, EventArgs e)
        {
            stopFlag = true;
        }
 
        //Начало новой игры
        private void NewLife()
        {
            for (int i = 0; i < maxValue ; i++)
            {
                for (int j = 0; j < maxValue; j++)
                {
                    massBool[i, j] = false;
                    massBoolTemp[i, j] = false;
                    massButton[i, j].BackColor = Color.Black;
                }
            }
            generation = 0;
            label1.Text = string.Empty;
            this.Refresh();
        }
 
        //метод выполняется в отдельном потоке, вызываем метод генерации нового поколения 
        //и проверяем состояние переключателя конца процесса
        private void GoLife()
        {
        for (int i = 0; i < breakPointGeneration ; i++)
            {
                NextGeneration();
                generation++;
                label1.Text = generation.ToString();
                this.Refresh();
                if (stopFlag) { break; }
             }
        if (stopFlag) { stopFlag = false;  NewLife(); }
        }
 
        //Генерирует новое поколение
        public void NextGeneration()
        {
            this.SuspendLayout();
            
            for (int i = 0; i < maxValue ; i++)
            {
                for (int j = 0; j < maxValue; j++)
                {
                    if ((SosediCount(i, j) == 3) && (!massBool[i, j])) { massBoolTemp[i, j] = true; }
                    if (((SosediCount(i, j) == 3) || (SosediCount(i, j) == 2)) && (massBool[i, j])) { massBoolTemp[i, j] = true; }
                    if ((SosediCount(i, j) < 2) && (massBool[i, j])) { massBoolTemp[i, j] = false ;  }
                    if ((SosediCount(i, j) > 3) && (massBool[i, j])) { massBoolTemp[i, j] = false; }
                }
            }
            for (int i = 0; i < maxValue ; i++)
            {
                for (int j = 0; j < maxValue; j++)
                {
                    massBool[i, j] = massBoolTemp[i, j];
                    if (massBool[i, j]) { massButton[i, j].BackColor = Color.White; } else {massButton[i, j].BackColor = Color.Black ; }
                }
            }
            this.ResumeLayout();
        
        }
 
        //функция расчета количества соседей у особи
        private int SosediCount(int a, int b)
        {
           int sosedi = 0;
           int limit = maxValue - 1;
 
            if (a > 0 && massBool[a - 1, b]) {sosedi++;}
            if (a > 0 && b < limit && massBool[a - 1, b + 1]) { sosedi++; }
            if (b < maxValue-1 && massBool[a, b + 1]) { sosedi++; };
            if (a < limit && b < limit && massBool[a + 1, b + 1]) { sosedi++; }
            if (a < limit && massBool[a + 1, b]) { sosedi++; }
            if (a < limit && b > 0 && massBool[a + 1, b - 1]) { sosedi++; }
            if (b > 0 && massBool[a, b - 1]) { sosedi++; }
            if (a > 0 && b > 0 && massBool[a - 1, b - 1]) { sosedi++; }
            return sosedi;
        }
    }
 
    //класс объектов, хранящих индексы массива для Button.Tag
    public class Coords
    {
        private int i;
        private int j;
        public int I
        {
            get {return i;}
            set { i = I; }
        }
        public int J
        {
            get {return j;}
            set { j = J; }
        }
        public Coords(int a, int b)
        {
            i = a; j = b;
        }
 
    }
 
}
А нужно чтобы считались клетки как будто размножаются в трехмерном пространстве, а отображались в двумерном.. вот это у меня никак не получается(((((((((
0
Sequd
80 / 79 / 3
Регистрация: 03.11.2009
Сообщений: 723
16.11.2011, 19:08 #4
опять не совсем понял, вам необходимо считать в 3 измерениях? x,y,z?
и в чем проблема?) добавьте к вашему классу Coords новую переменную z и считайте вместе с ней
1
za5
442 / 346 / 30
Регистрация: 16.10.2010
Сообщений: 842
Записей в блоге: 7
17.11.2011, 13:31 #5
2.5d вещь весьма смутная, только лишняя трата времени, когда есть 3d.
план такой:
1) посмотри в этом разделе темки, как рисовать текстуры в хне.
2) как в приложении получишь то, что у тебя сейчас в 2d, рисуй в rendertarget всю сцену.
3) напиши камеру (можно взять отсюда: Камера)
4) полученную текстуру вместе с матрицами можно передавать в базовый эффект, либо свой шейдер.
5) получи луч под курсором мышки через vieport.unproject
6) проверяй пересечения через ray.intersects
7) hfleqcz htpekmnfne
всё.
2
17.11.2011, 13:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2011, 13:31
Привет! Вот еще темы с ответами:

мини 3D игра. - XNA
Только одна ошибка: Ошибка 1 скелет, не найден. Сетки, содержащие канала весов вершин не могут быть обработаны без доступа к скелету...

Игра SpaceArcade - XNA
Опыта в программировании маловато, по-этому решил его приобрести. Так как самый лучший источник опыта это практика, я начал делать что-то...

мини 2D игра - XNA
Возникла сложность. В игру хотель добавить шрифты. Вреде как всё нормально. Но блин и из-за одной ошибки, процесс создания прекратился((( ...

игра вконтакте - Графика и игры
Здраствуйте ! У кого есть опыт запуска своей игры вконтакте ? Подскажите , правильно ли я понимаю: Для какой нибудь много...


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

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

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