C#: у нас поле, где каждая клетка имеет свой id
Вопрос не по 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,
Я про С, а не про С++ и не про шарп. Сначала надо понять методологии простого программирования. Изучить массивы, структуры, а уж потом переходить к классам и наследованиям.