RU

C#: у нас поле, где каждая клетка имеет свой id

SneakBug8 #1170 30.05.2015 06:37 9 comments 9637 views

Вопрос не по qsp, а по общей механике и c# в частности
Допустим у нас поле, где каждая клетка имеет свой id, и есть переменная id, которая обозначает id текущей клетки игрока.
И 4 кнопки
Вверх, вниз, влево и вправо
надо найти некий алгоритм вычисления нового id после перемещения игрока
Причем проблема в том, что если например при переходе “вправо”, у нас текущий id=5, то по алгоритму новый id=id+1 т.е. 6, но шесть это уже другой ряд, что для нас невозможно. А также еще существуют непреодолимые для игрока стены.
Есть вариант первый, это гигантский код для каждого id на поле.
switch (id)
 
Вариант второй - записать в условие все id, где вправо некуда идти.
if (id!=5 or id!=10 or id!=15)
 
Есть другие варианты? Какой вариант лучше использовать с точки зрения языка?

Многомерные массивы тебе помогут.

Ajenta:

Многомерные массивы тебе помогут.

Ты про кусп? В C# я еще до них не дошел :)

Охохо…
Как превратить одномерный массив в двухмерный:
У нас есть поле w * h (w - width ширина, h - высота)

Как обратиться к ячейке с координатами (x,y):
A[x + y * w]

Как обратиться к соседней ячейке по диагонали вправо вниз:
A[(x+1) + (y+1) * w]
Предварительно проверив что (x+1 < w) и (y+1 < h) )

Как получить координаты (x,y) зная сквозной номер ячейки i:
y = i / w
x = i mod w (для C# x = i % w; )

Убрал вопросы по C# в подходящий раздел. Форум “разработка” предназначен для разработки на QSP.

Посмотрел я многомерные массивы, это ужассс https://msdn.microsoft.com/ru-ru/library/2yd9wwz4.aspx

На QSP я чаще встречал такую фишку:
$A[’<<x>>_<<y>>’]

На C++ особой поддержки многомерных массивов нету, все делают их из одномерных, так как я сказал.
Там может быть массив массивов, но это несколько другое - размеры вложенных массивов могут быть разные.

А на C# я делаю так-же как на C++

SneakBug8,
Ничего ужасного там нет. Просто объявление массива плюс сразу инициализация. И запись очень удобная, можно сразу всю матрицу расписать.

А вообще, я уже говорила, изучите сначала базу на С хотя бы, а потом уже шарпом занимайтесь. Без понимания материала у вас ничего не получится.

Axil,
$A[’<<x>>_<<y>>’] - это с подстановкой из переменных

Ну почему-же, у нас на работе есть товарищь который только C# знал, а теперь ему пришлось и C++ изучать по ходу работы.
Конечно он удивлялся что в C++ все намного сложнее, но ничего, освоил.
А я когда C# изучал - удивлялся как на нем все проще и безопаснее чем на С++.

Axil,
Я про С, а не про С++ и не про шарп. Сначала надо понять методологии простого программирования. Изучить массивы, структуры, а уж потом переходить к классам и наследованиям.

Log in or Register to post comments.