Форум программистов, компьютерный форум, киберфорум
Программирование игр
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Нарушитель
569 / 118 / 0
Регистрация: 09.02.2020
Сообщений: 2,944
Записей в блоге: 9

Игра "SUPER MARIO" или "SOLDIR OF MARIO"

28.01.2025, 13:58. Показов 27154. Ответов 275
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, дорогие мои братья и сёстры!

Игра "SUPER MARIO" или "SOLDIR OF MARIO"

Да да!

Добавлено через 19 минут
Господь сподобил меня Своей милостью, я, когда-то, писал вот эту игру - она была написана, когда я окончил школу и поступил в ВУЗ, летом.

Видео процесс игры и работа в редакторах кирпичиков, ролик сети 'You Tube', длительность ролика около 9 минут.
Кликните здесь для просмотра всего текста


И, что хочу вот сказать: перед тем, как Господь поднял меня, это было рано, в пятницу 13 февраля 1998 года, я являлся в то время лаборантом на кафедре вычислительных машин. К.г.(*), я написал игру под названием "SOLDIR OF MARIO" - "Солдат Марио", как смесь игры Super Mario (c TV приставки "Dendy") и игры Soldier of Fortune ("Солдат Фортуны") с небольшого ZX-Spectrum компьютера (памяти у него было всего 64 килобайт) в 96-97 годах, летом, почти в то время не спал и не ел, потому что меня накрыла настолько сильная волна поддержки, у меня было постоянно состояние эйфории, пока я, практически не отрываясь от экрана монитора занимался программированием "Soldir of Mario"

И, вот, разработка этой игры очень здорово помогает понять и как устроен и задуман наш мир.

https://github.com/wiz3267/mario

Добавлено через 4 часа 52 минуты
Программистам, которые занимались разработкой игр, лучше, как мне кажется, легче понять, что мир, в котором мы живём, очень интересно устроен. Никаких случайностей, тут, конечно нет. Прежде, чем реализовать проект, Господь размышлял - а какой это будет мир, ад или рай. Если рай, тут одна цветовая гамма, все цветы радуги, небо было необходимо создать голубоватого цвета, траву - зеленого, облака - белыми, хлеб - белый. Но этого мало. Нужно ещё разработать все живые организмы - какова будет взаимосвязь всех животных и существ экосистемы. Нужно создать некоторые вещества, без которых невозможна жизнь любого организма - вода H2O и кислород - просто О2. Также, кроме всего прочего, это вещество должно будет обладать рядом важных для жизни свойств - при 0 градусов оно должно начинать закристаллизироваться и становится жестким, твёрдым веществом, однако свойства у него будут таковы, что оно не будет тонуть в воде. Почему так - в таком случае зимой водоёмы с водой будут покрываться корочкой льда, и можно в таком случае ходить по воде (всем людям). Ну и так далее. Один организм должен будет питаться другим. Главный герой или персонаж этого мира - человек. Человек должен состоять не только из костей и мяса, но как венцу творения у Человека будет бессмертная душа, "Я", сознание и память. Человек будет способен своим сознанием быть в высших сферах подсознания и общаться с Бесконечным Богом.

Каковы должны быть размеры этого мира, продолжительность дня и ночи, продолжительность года, как и вокруг какой оси должен вращаться этот мир, скорость движения вокруг Солнца (основной светильник), какое должно быть расстояние от Солнца до Земли, мощность Солнца, чтобы была возможность жить на планете людям и другим живым существам - короче говоря, чтобы мы, жители планеты Земля, не поджарились летом на Солнце и не замерзли зимой.....и т.д. и пр. и пр., будет ли вокруг этого земного мира вращаться ещё один - планета Луна - если да, то какова должна она быть, радиус планеты Луна, скорость вращения вокруг Земли, скорость вращения вокруг оси и наклон оси, рельеф местности.

Ну и, самое главное, а каков будет сам-то Человек, Венец Творения? Как он должен выглядеть? Потом, по истории строительства нами Вавилонской башни, когда древние люди решили построить башню до неба - Господь расстроил их планы, произвёл разделение языков у строителей Вавилонской башни. До селе, они говорили на одном самом первом древнем первоязыке, а тут они заговорили, вдруг, внезапно, на самых разных языках и наречиях, они перестали понимать друг друга, остановили на время строить башню, заморозили строительство, как бы сказали сейчас, спустились с неё и разбрелись по лицу всей Земли. Всё это написано в книге "История нашей Вселенной - от создания до падения", где самым подробным образом описана история Землян, что случилось с Землянами: почему они, начав за "здравие", окончили уже за "упокой", переубивали друг друга, разрушили сами себя, превратили свою планету в самый настоящий ад. Увы. Чтобы люди на будущее знали, как не следует поступать и жить, смотря на эту трагическую гибель нашего с вами Земного мира - планеты Земля Солнечной Системы Галактики Млечный Путь.
3
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.01.2025, 13:58
Ответы с готовыми решениями:

Super Mario
Привет Ребята! Помогите, пожалуйста, найти ошибку! #include <SFML/Graphics.hpp> using namespace sf; int ground = 400; ...

Super Mario на C++ и OpenGL
Всем привет. Решил написать марио на opengl. Пока это все без текстур. Проблема в том, что уже который день не получается написать...

Персонаж super mario не видит коллизию
помогите пожалуйста с кодом,уже всю голову сломал, персонаж не видит коллизию,проваливается сквозь блоки,прикладываю класс игрока package...

275
Just Do It!
 Аватар для XLAT
4221 / 2687 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
13.02.2025, 10:15
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от zorxor Посмотреть сообщение
Сложно ли будет переписывать (точнее, адаптировать) эту игру для OS Android?
я нуб в программировании под андроид, но тема интересная, даже очень.

предлагаю вместе изучить вопрос:
Можно ли вывести текстурированный треугольник на андроиде прогой написанной на С++?
и если можно, то как?

я ещё ни разу этот вопрос не гуглил)

Цитата Сообщение от zorxor Посмотреть сообщение
Но мы всегда можем использовать свою математику ...
вы отвечаете, как чатгпт)

Цитата Сообщение от zorxor Посмотреть сообщение
микропроцессоров с аппаратной поддержкой больших типов данных, превышающих double.
не надо превышающую.
у нас есть любимы float - нужно прикинуть на какую размером Вселенную его хватит?
Сумеете прикинуть?
1
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,099
13.02.2025, 20:43
Цитата Сообщение от zorxor Посмотреть сообщение
Необходимо спроектировать и после создать Вселенную, особое внимание следует уделить только одной планете, которая будет находиться в созданной Вселенной в Галактике "Млечный Путь", с центром - звездой по имени "Солнце". Необходимо ограничить максимально возможную скорость электромагнитного взаимодействия порядка 300 тысяч километров за одну секунду. Назвать планету будет необходимо "Земля", а проживающих жителей на планете "Земля" - Землянами.
И вы хотите это все моделировать? Вплоть до распространения электромагнитных волн? Я вас разочарую: на это не хватит ни вашей вычислительной мощности, ни мощности компьютера.
Ну и смешивать фундаментальные законы модели со всякой косметической ерундой (как именно будет называться планета, как именно будут называться болванчики) не стоит.
Цитата Сообщение от zorxor Посмотреть сообщение
Луна должна вращаться вокруг Земли с заданной скоростью, также массу Луны нужно подобрать такую, чтобы она могла своей гравитационной силой "таскать" воду на Земле, вызывая приливы и отливы, что важно будет для экосистемы разрабатываемого мира
Так это ж самое интересное. Поменять параметры и посмотреть как бы эволюционировала экосистема при других условиях.
Ну то есть мы знаем, к чему привела та череда случайностей, которая произошла в нашей реальности - к возникновению многоклеточной жизни. Очертаниям материков, конкретным видам животных и растений.
А если бы Луна была вдвое больше? А если бы ее вообще не было? А если бы синапсиды с свое время "изобрели" полноценное яйцо, со скорлупой (что усложнило бы появление живорождения - вон архозавры до сих пор не осилили).
Другое дело, что, повторю, никакой вычислительной мощности на это не хватит.
Поэтому если уж моделировать, то что-то более простое. Хотите движение космических тел - пожалуйста. А это тоже абсолютно непростая задача. Хотите эволюцию жизни - на здоровье (тоже, разумеется, упрощенно - все гигабайты ДНК, умноженные на всех особей всех видов вам элементарно хранить негде).
Цитата Сообщение от zorxor Посмотреть сообщение
По поводу игры - скажите пожалуйста, XLAT, спрашиваю Вас, поскольку Вы читали исходные тексты этой игры. Сложно ли будет переписывать (точнее, адаптировать) эту игру для OS Android?
Я, конечно, в ваш код не вглядывался, но завязка на доисторический видеорежим (320х200х1) и ассемблерные вставки... Проще переписать с нуля.
Цитата Сообщение от zorxor Посмотреть сообщение
Много раз я подвергался в психбольнице процедуре деградации и уменьшения мозга
...
год от рождества Господа и Спасителя нашего Иисуса Христа
А без очередных историй из жизни и религиозного бреда на техническом форуме вот никак нельзя было обойтись?
Среди этих помоев очень трудно искать осмысленную информацию.
Цитата Сообщение от XLAT Посмотреть сообщение
Можно ли вывести текстурированный треугольник на андроиде прогой написанной на С++?
и если можно, то как?
Очевидно, что можно, раз под него пишут игры. Насколько я знаю, Андроид поддерживает OpenGL и SDL. Но под Андроид я не писал никогда, поэтому подробностей тоже не назову.
0
Just Do It!
 Аватар для XLAT
4221 / 2687 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
14.02.2025, 05:19
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Очевидно, что можно
там ключевое:
Цитата Сообщение от XLAT Посмотреть сообщение
если можно, то как?
0
Нарушитель
569 / 118 / 0
Регистрация: 09.02.2020
Сообщений: 2,944
Записей в блоге: 9
14.02.2025, 09:09  [ТС]
Здравствуйте, COKPOWEHEU!

Рад Вас приветствовать, давно не виделись! Благодарю Вас за участие в теме.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
А без очередных историй из жизни и религиозного бреда на техническом форуме вот никак нельзя было обойтись?
Среди этих помоев очень трудно искать осмысленную информацию.
Прошу прощения, постараюсь, впредь, не отвлекаться, или, если отвлечься, то чуть-чуть.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
к чему привела та череда случайностей
Да о чём Вы говорите? Нет никаких случайностей, это давно пора уже понять.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Я, конечно, в ваш код не вглядывался, но завязка на доисторический видеорежим (320х200х1) и ассемблерные вставки... Проще переписать с нуля.
Там в чём прикол-то? Что игра выводит и формирует картинку во внутреннем буфере класса SCREEN, т.е. тут совсем простая инфраструктура, этот компьютерный код будет одинаково выполнятся на любой системе. Если asm вставки убрать. Я просто тогда экономил, так как машина представляла собой массив открытых портов ввода/и или/вывода и открытых ячеек памяти, по-сути это супервизор режим. Ты там всё сможешь делать - не только вводить, но и выводить информацию машины. Не только читать любую ячейку памяти машины, но и писать в неё. Режим супервизор.

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
//Screen.h
#ifndef __SCREEN_H
#define __SCREEN_H
 
#include "rects.h"
 
/*
    Класс SCREEN предназначен для вывода информации во внутренний буфер,
копию экранного буфера. Когда кадр сформирован, вызывается функция update(),
и изображения из внутреннего буфера копируется в видеопамять (на экран)
    Примечание: такие понятия, как 'вывод на экран', 'очистка экрана'
относятся не к физической VRAM, а к теневому экрану (DoubleBuffer, дублирующиц буфер)
    Чтобы информация появилась на экране необходимо вызвать функцию update() 
    Настоящая реализация поддерживает размер экрана 320x200
*/
class SCREEN {
 
// ********************** ДАННЫЕ-ЧЛЕНЫ ******************************
public:
 
    BYTE    DoubleBuffer[320*200];  //теневой экран
 
public:
 
    char    bkcolor;        //цвет заднего фона (при выводе текста)
    char    color;          //цвет рисования
    int     x,y;            //координаты курсора
 
    //хранит копию экрана 
    BYTE    SavedDoubleBuffer[320*200]; 
 
// ********************** ФУНКЦИИ-ЧЛЕНЫ *************************
public:
    void ConvertDoubleBufferToTrueColor(COLORREF * TrueColorBuffer);
    
    //значение State для bitblt
    enum {
        FLIP_HORZ=0x01, //перевернуть спрайт по горизонтали
        FLIP_VERT=0x02, //перевернуть спрайт по вертикали
        TRANSP=0x04 //есть прозрачные пикселы
    };
 
    enum {
        ONLY_DIGIT=0x01 //фунция InputString будет вводить только цифры
    };
 
    void bitblt(int X,int Y,int Len,int Hei, char far* Data, char State);
    void bitblt_part(int x,int y,int x_in, int y_in,int Len, int Hei,
                    int FactLen,int FactHei, char far* Data, char State);
    void border(int x,int y,int len,int hei, int color);    
    void center(int y, char far*);  
    void clear(int=0);              
    void CreatePalette();           
    void DecrementPalette();        
    void IncrementPalette();        
 
    void LoadPaletteFromFile(char *fname);  //восстанавливает палитру из файла
    void SavePaletteToFile(char *fname);    //записывает текущую палитру в файл
 
    //получить массив цветовых регистров
    //void GetColorRegisters(int startReg, int count, RGB * values);
    
    //установить массив цветовых регистров
    //void SetColorRegisters(int startReg, int count, RGB * values);
 
    //получение одного цветового регистра
    void GetColorRegister(unsigned char nReg,char&r,char&g,char&b);
 
    //установка одного цветового регистра
    void SetColorRegister(unsigned char nReg,char r,char g,char b);
 
    
    unsigned long InputNumber(unsigned int DigitCounter);   
    void InputString(int len, char far * str,int flag=0);
    void locate(int x,int y);   
    void locateXY(int x,int y); 
    void line(int x1,int y1,int x2,int y2, char color); 
    void lineright(int x,int y,int len, char color);    
    void linedown(int x,int y,int hei, char color);     
 
    SCREEN& operator << (char*);
    SCREEN& operator << (DWORD);
    SCREEN& operator << (unsigned);
    SCREEN& operator << (int);
    SCREEN& operator << (char);
    SCREEN& operator<< (SCREEN& (*_f)(SCREEN&))
    {
        return (*_f)(*this);
    }
 
    void pause(int n);
    void putpixel(int x,int y,int color); 
    void putpixel();                     
 
    void putSymbol(BYTE s);             
    void putSymbol(int x,int y, unsigned char s);   
    void putText(char far *);       
    void putNumb(unsigned long num);    
    void putNumb(unsigned long num,char width); 
    void rectangle(int x,int y,int len,int hei,int color);
    void rectangle(MYRECT &rt,int color);
    void setbkcolor(char c){bkcolor=c;};    //установка цвета вывода
    void setcolor(char c){color=c;};    //установка цвета вывода
    
    void Set320x240Mode();          //установить режим 320*240, 256 цветов
    void update(void);          //обновление экрана
    void update(RECT);          //обновление экрана
//  void wait(void);            //ждет обратного хода луча
    void SaveScreen();          //сохраняет экран во внутреннем буфере
 
    SCREEN(void);               
    ~SCREEN(void);              
 
};
//================== end of class 'SCREEN' ==============================
 
inline        SCREEN& endl(SCREEN& ob) { return ob; }
 
class MANIPMY {
public:
    SCREEN& (*fun) (SCREEN& , int);
    int ag;
 
public:
    MANIPMY ( SCREEN& (*_f)(SCREEN&, int) , int _a)
    {
        fun=_f;
        ag=_a;
    }
 
        friend SCREEN& operator<< (SCREEN& obj, MANIPMY& _f)
        {
            (_f.fun) (obj, _f.ag);
            return obj;
        }
};
 
MANIPMY& setcolor(int);
MANIPMY& cur(int,int);
 
 
//extern SCREEN scr;
 
 
/*
class FONT
{
    //возможные перечесления размеров фонта
    enum {
        FONT8x8,
        FONT8x14,
        FONT8x16
    };
 
    char * FontAddres;      //адрес фонта
    char SymHigh;           //высота одного символа
 
public:
    FONT(int size=FONT8x8); //конструктор size - размер фонта
    ~FONT();    //деструктор
 
    //показать на экране символ с дополнительным цветом color
void    Show(int x,int y, int symbol, char color);
};
 
  */
 
 
#endif
Знаете ли Вы что-либо о Компьютерных войсках Армии? Я вчера или позавчера смотрел одно видео и был им шокирован. Оказывается, сейчас меняется закон для призыва в армию, и в армию будут брать и людей, с так называемой <censor>френией - надуманным диагнозом для некоторых инакомыслящих.
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,099
14.02.2025, 09:34
Цитата Сообщение от zorxor Посмотреть сообщение
к чему привела та череда случайностей
Да о чём Вы говорите?
Вроде ж ясно написал - о реальности. Мы прекрасно видим, что никакого замысла за этим нет, есть только бездушные законы природы.
Цитата Сообщение от zorxor Посмотреть сообщение
Там в чём прикол-то? Что игра выводит и формирует картинку во внутреннем буфере класса SCREEN.
Да. Современные графические приложения работают совершенно по-другому. Изображение формируется как набор примитивов (обычно треугольников) с текстурами. Они передаются видеокарте, и та сама преобразовывает их для вывода на экран. Даже "офисные" приложения, в которых никакой трехмерки нет, тоже через видеокарту предпочитают работать.
Нет, как вы, с ручной растеризацией тоже можно - отрисовать всю картинку во внутреннем буфере, а потом передать видеокарте как единое целое. Но это медленно. Вы загружаете процессор задачей, для которой он подходит плохо. Тогда как рядом находится видеокарта, которая справляется хорошо.
Цитата Сообщение от zorxor Посмотреть сообщение
Насколько я знаю, в телефоне, в его нижнем уровне, работает свободная, операционная и с открытым кодом система нападобеи Linux.
В телефоне вам не надо на нижний уровень, да и не пустят вас туда. А на верхнем свои особенности, не похожие ни на Linux, ни на Windows. Но меня разработка под телефоны не интересовала никогда, поэтому подробностей не знаю. Вам придется искать эту информацию самостоятельно.
Цитата Сообщение от zorxor Посмотреть сообщение
Если Вы говорите
Компьютерные войска?
Я такого не говорю, не надо клеветать. Я вообще почти не говорю про политику и про не научно-технические темы. Если хотите это обсуждать - идите на другой форум.
А вот если хотите обсудить свою игру или, скажем, моделирование какого-то аспекта реальности - добро пожаловать. Учитывая ваши заблуждения, вам было бы полезно как раз промоделировать эволюцию. Убедиться, что наследственности, изменчивости и отбора достаточно для формирования новых видов. Или опровергнуть это предположение.
0
Нарушитель
569 / 118 / 0
Регистрация: 09.02.2020
Сообщений: 2,944
Записей в блоге: 9
14.02.2025, 10:05  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Я такого не говорю, не надо клеветать.
Прошу прощения, я находился в состоянии редактирования сообщения, я не имел Вас ввиду...просто не успел отредактировать, понадеялся на длительный интервал времени, что даётся сообщению для редактирования, а Вы ответили, и я, более, потерял возможность редактирования: сообщение перевелось в readonly режим(сообщение закрылось для записи)

Вот так оно выглядит сейчас:
Знаете ли Вы что-либо о Компьютерных войсках Армии? Я вчера или позавчера смотрел одно видео и был им шокирован. Оказывается, сейчас меняется закон для призыва в армию, и в армию будут брать и людей, с так называемой <censor>френией - надуманным диагнозом для некоторых инакомыслящих
Как видно из текста сообщения, о Вас тут нет ни слова. Я полностью переделал сообщение. Это побочный эффект редактирования.

Добавлено через 10 минут
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
добро пожаловать
многократно благодарю....

Добавлено через 13 минут
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Даже "офисные" приложения, в которых никакой трехмерки нет, тоже через видеокарту предпочитают работать.
В смысле, они подают в расчёт видеокарты некоторые данные и видеокарту можно просто загрузить математическими рассчётами? Если можно - приведите пример, как это выглядит, я никогда с таким ещё не сталкивался. А по поводу текстур и 3d - я никогда с этим дело не имел, openGL и ещё что-то. Там что-то слишком много инфраструктуры, перегруз информацией...матрицы, треугольники, многоугольники... Для меня всё это, эти рассчёты - это какая-то математическая "магия". Ну простите, ну не люблю я математические рассчёты: если у меня нет понимания, как одна матрица может превратиться совершенно в другую....всё это магия числовых преобразований. Чёрный ящик - непонятно, как вообще работает. Такое изобретает гениальный ум, конечно.....К примеру, есть так называемое Фурье преобразование, когда мы из записанного ранее нами сигнала выделяем отдельные синусоидальные с разной фазой (другими словами, если визуально смотреть, просто сдвинутая синусоида вправо или влево) составляющие.

Вот, поэтому, мой подход может подойти именно молодым программистам: ум у юношей работает очень хорошо, я сам себя вспоминаю, когда я ещё был совсем маленьким, мне было всего 10 лет, я работал на отличной японской машине - YAMAHA MSX - 2
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,099
14.02.2025, 10:17
Цитата Сообщение от zorxor Посмотреть сообщение
я находился в состоянии редактирования сообщения, я не имел Вас ввиду...просто не успел отредактировать
А вам уже не раз говорили: сначала формулируете мысль, потом ее записываете, потом перечитываете и только потом, если написано именно то, что вы хотели сказать, публикуете. Никому не интересны эти "не хватило времени на редактирование".
Цитата Сообщение от zorxor Посмотреть сообщение
Как видно из текста сообщения, о Вас тут нет ни слова. Я полностью переделал сообщение.
Оно как не имело ни малейшего отношения к теме, так и не имеет.
Здесь полагается обсуждать не ваши заблуждения о сверхъестественном и не ваши параноидальные фантазии, а только вашу игру.

Добавлено через 10 минут
Цитата Сообщение от zorxor Посмотреть сообщение
В смысле, они подают в расчёт видеокарты некоторые данные и видеокарту можно просто загрузить мат. рассчётами?
Штатное использование видеокарты - расчет трехмерной графики. На вход подается массив вершин, подаются матрицы преобразования, текстуры. А на выходе она рисует на экране картинку.
Современные операционные системы используют тот же механизм для вообще любого рисования, в том числе окошек, кнопок и тому подобного. Для приложений внутри это выглядит просто как вызов API - "расположить кнопку здесь", "расположить поле ввода там".
Хотя есть и технологии использования видеокарты для произвольных вычислений. Вычислительные шейдеры, OpenCL, NvidiaCuda, ... Но у них свои ограничения, и вам туда лезть сейчас бессмысленно.
Цитата Сообщение от zorxor Посмотреть сообщение
А по поводу текстур и 3d - я никогда с этим дело не имел, openGL и ещё что-то. Там что-то слишком много инфраструктуры, перегруз информацией...матрицы, триугольники, многоугольники. Для меня всё это, эти рассчёты - это какая-то математическая "магия".
В каком-то смысле так и есть. Но есть ведь готовые библиотеки и готовые примеры кода, которыми можно пользоваться без полного понимания.
А есть и вообще игровые движки, в которых игру худо-бедно может сляпать даже домохозяйка. Но в этом я не спец, ищите в профильных темах. Мой предел - визуализация моделирования при помощи OpenGL1 или попытка расчетов на шейдерах / OpenCL (неудачная, поскольку мощность видеокарты оказалась меньше мощности процессора. Ну или навыка не хватило).
Цитата Сообщение от zorxor Посмотреть сообщение
Чёрный ящик - непонятно, как вообще работает.
Если делаете игру, освоить все-таки придется. Никому не интересна "игра" под DOS с разрешением 320х200.
0
Нарушитель
569 / 118 / 0
Регистрация: 09.02.2020
Сообщений: 2,944
Записей в блоге: 9
14.02.2025, 10:21  [ТС]
О, нашёл!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//очистка экрана 
//color - цвет заполнения по умолчанию ноль
void SCREEN::clear(int color)
{
    BYTE * d=DoubleBuffer;
    _asm {
        mov edi,d
        cld
        mov eax,color
        mov ecx,320*200/4
        rep stosd
    }
}
Ускорение происходит за счёт использования ассемблерной инструкции с префиксом rep - повтор (rep stosd)
0
Просто Икс
 Аватар для Mc X
692 / 234 / 47
Регистрация: 15.12.2009
Сообщений: 696
14.02.2025, 11:02
Цитата Сообщение от XLAT Посмотреть сообщение
если можно, то как?
Ответ на твой вопрос: Android NDK
2
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,099
14.02.2025, 11:17
Цитата Сообщение от zorxor Посмотреть сообщение
Ускорение происходит за счёт использования ассемблерной инструкции с префиксом rep - повтор (rep stosd)
А оно точно происходит? Может, там внутри эмуляция на обычном цикле. Я слышал, в x86 была какая-то специальная инструкция по сохранению на стек всех регистров. Так вот, она работала медленнее, чем ручное сохранение.
В любом случае, сейчас пытаться оптимизировать код при помощи ассемблерных вставок - крайняя мера. Когда все остальное уже вылизано так, что дальше некуда.
Да и вообще, преждевременная оптимизация - зло.
0
Нарушитель
569 / 118 / 0
Регистрация: 09.02.2020
Сообщений: 2,944
Записей в блоге: 9
14.02.2025, 11:42  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
я находился в состоянии редактирования сообщения, я не имел Вас ввиду...просто не успел отредактировать
А вам уже не раз говорили: сначала формулируете мысль, потом ее записываете, потом перечитываете и только потом, если написано именно то, что вы хотели сказать, публикуете. Никому не интересны эти "не хватило времени на редактирование".
Дело ещё и в том, что как только я отправляю сообщение в систему, члены системы начинают сразу же прочитывать его содержимое и могут отправить взамен некоторые мысли или идеи, вкладывая их программисту-разработчику в его голову и вынуждающие программиста вновь и вновь прибегать к режиму правки, повторных редактирований сообщений.
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,099
14.02.2025, 11:46
Цитата Сообщение от zorxor Посмотреть сообщение
Ускорение происходит за счёт использования ассемблерной инструкции с префиксом rep - повтор.
Повторяю вопрос: а оно точно происходит или эта инструкция работает медленнее цикла?
Цитата Сообщение от zorxor Посмотреть сообщение
Дело в том, что как только я отправляю сообщение в систему, члены системы начинают сразу же прочитывать это сообщение и могут отправить взамен некоторые мысли или идеи, вкладывая программисту в голову.
Вот и отправляйте сначала в эту свою систему, и только когда сформулируете финальный вариант - публикуйте на форум.
0
Just Do It!
 Аватар для XLAT
4221 / 2687 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
14.02.2025, 11:46
Цитата Сообщение от Mc X Посмотреть сообщение
Ответ на твой вопрос: Android NDK
zorxor, мне дали ссылку, спешу поделиться с вами!

теперь что нужно вам сделать:
по пунктам расписать что конкретно нужно сделать,
а я эту вашу методичку протестирую.

ок?

я вот тоже без дела не сидел - открыл по ссыле в гугле тут...
1
Нарушитель
569 / 118 / 0
Регистрация: 09.02.2020
Сообщений: 2,944
Записей в блоге: 9
14.02.2025, 12:08  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Повторяю вопрос: а оно точно происходит или эта инструкция работает медленнее цикла?
Не знаю. Этот код был написан для микропроцессора i486 в 1996/1997 годах. Пока Вы не усомнились в скорости, что быстрее, информацию, я искренне верил, что цепная инструкция rep stosd...работает быстрее, чем цикл с декрементом регистра-счетчика ECX с условным переходом, если не ноль, на начало цикла. Как-бы. Никогда до этого момента даже не сомневался в этом. Тесты не проводил. Сейчас современные процессора, комплектующие (память), достигли столь высокого уровня быстродействия системы в общем и целом, что может быть и медленней цепная инструкция. Не знаю даже - раньше у меня даже сомнений никаких не было, что это так. (Машина у меня была оснащена небольшим, около 14 дюймов, цветным монитором. Папа купил мне IBM/PC персональный компьютер, примерно в 1996 году с ОС DOS чёрный экран)
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,099
14.02.2025, 12:30
Цитата Сообщение от zorxor Посмотреть сообщение
Пока Вы не усомнились в скорости, что быстрее, информацию, я искренне верил, что цепная инструкция rep stosd...работает быстрее
Вот и не заморачивайтесь. Компиляторы сейчас умные пошли, и инструкции процессора они знают куда лучше нас. Если сумеют оптимизировать - оптимизируют. Главное не совсем уж говнокод им писать. Конечно, хороший программист на ассемблере сумеет обогнать компилятор, но его время разумнее потратить на написание алгоритма, а не возню с битами. Это даст куда больший эффект.
В общем, не тратьте время на ассеблерные вставки. Тем более если собираетесь писать под Андроид. Там ведь не x86.
0
Нарушитель
569 / 118 / 0
Регистрация: 09.02.2020
Сообщений: 2,944
Записей в блоге: 9
14.02.2025, 16:01  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Если делаете игру, освоить все-таки придется. Никому не интересна "игра" под DOS с разрешением 320х200.
Ну сейчас она уже не под DOS, а для Windows, проект Visual Studio 6.0, компилируется и запускается. То есть достаточно иметь VS 6.0 и проект с гитхаба, проект открывается в студии, компилируется и запускается. Больше качать ничего не нужно.
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,099
14.02.2025, 16:33
Заглянул в ваш гитхаб. Куча каких-то файлов со сбитой кодировкой. И местами ассемблерные вставки.
В общем, поскольку ваш проект для меня интереса не представляет, слишком долго в нем копаться не стал. А на первый взгляд через что идет графика не видно.
0
Нарушитель
569 / 118 / 0
Регистрация: 09.02.2020
Сообщений: 2,944
Записей в блоге: 9
14.02.2025, 17:15  [ТС]
COKPOWEHEU, прошу прощения, обещаю непременно починить русские комментарии, которые отображаются неправильно, неверно, в самом ближайшем, к.г., времени.
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,099
14.02.2025, 17:19
Если хотите продолжать дорабатывать именно этот проект - имеет смысл. Но, возможно, стоит начать новый с нуля. Раз уж в сторону телефонов смотрите.
0
Нарушитель
569 / 118 / 0
Регистрация: 09.02.2020
Сообщений: 2,944
Записей в блоге: 9
15.02.2025, 11:39  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
В общем, поскольку ваш проект для меня интереса не представляет, слишком долго в нем копаться не стал. А на первый взгляд через что идет графика не видно.
Да, срочно нужно заняться правильной кодировкой, с комментами понятно, конечно, будет больше.

Смотрите, в этом проекте очень просто с графикой: есть глобальная переменная с именем scr, тип - класс SCREEN.
Класс внутри себя содержит просто буфер памяти (с именем DoubleBuffer) 320x200x1, в котором формируется один кадр изображения. Когда цикл игры подходит к концу, кадр из внутренней памяти копируется в видеопамять. Вот и всё.

То есть, чтобы запустить для Андроид, нужна функция, которая позволяет получить прямой доступ к видеопамяти, и всё. И тогда внутренний буфер просто нужно будет преобразовать в нужный формат данных видеопамяти, и сбросить в видеопамять.

Добавлено через 40 минут

Вот, через какой презерватив (c именем DIRECTDRAW) (потому что она многозадачная, универсального применения система Windows) имеется доступ в буфер железа(экрана) видеоплаты:

такой умопомрачительный код:
C++
1
2
3
//блокируем поверхность, получая указатель на данные
    HRESULT result = pSurface->Lock(NULL, &ddSDesc,
        DDLOCK_SURFACEMEMORYPTR| DDLOCK_NOSYSLOCK,NULL);


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
172
173
174
175
176
177
178
179
bool CopyDoubleBufferToScreen(LPDIRECTDRAWSURFACE pSurface)
{
    //проверка на "потерю" поверхности
    if (pSurface->IsLost())
    {
        //восстанавливаем поверхность в данном случае
        pSurface->Restore();
    }
 
    DDSURFACEDESC ddSDesc={0};
    bool ok=false;
 
    ddSDesc.dwSize=sizeof(DDSURFACEDESC);
 
    //блокируем поверхность, получая указатель на данные
    HRESULT result = pSurface->Lock(NULL, &ddSDesc,
        DDLOCK_SURFACEMEMORYPTR| DDLOCK_NOSYSLOCK,NULL);
 
    if (result==DD_OK)
    {
        UINT hei=ddSDesc.dwHeight;
 
        char *buf= (char*) ddSDesc.lpSurface;
        int z=0;
 
        //исходные данные (буфер 320x200 точек) 1 байт на точку
        BYTE *sourc=scr.DoubleBuffer;
 
        int add_pitch=ddSDesc.lPitch;
 
 
        COLORREF screendata[320*200];
 
 
        scr.ConvertDoubleBufferToTrueColor(screendata);
 
        for(int x=0; x<320; x++)
        for(int y=0; y<200; y++)
        {
            COLORREF clr=screendata[y*320+x];
            DWORD I=y*2*640+x*2;
            screendata_smoth[I]=clr;
            screendata_smoth[I+1]=clr;
            screendata_smoth[I+640]=clr;
            screendata_smoth[I+640+1]=clr;
 
 
            //screendata_smoth[y*640+x+1]=screendata[y*320+x];
        }
 
        //исходные данные - 4 байта на точку
        //sourc=(BYTE*) screendata;
        sourc=(BYTE*) screendata_smoth;
 
        //если установлено соотвествующее разрешение
        //корректируем расположение буфера
        if (DISPLAY_HORIZONTAL>= 640 && DISPLAY_VERTICAL>=400)
        {
            int ScaleX=3,ScaleY=3;
 
            //центровка oX
            buf+=(ddSDesc.dwWidth*4-320*4*ScaleX)/2;
            //buf+=WindowRect.left*4;
 
            //центровка oY
            buf+=(ddSDesc.dwHeight-200*ScaleY)/2*add_pitch;
            //buf+=ddSDesc.dwWidth*WindowRect.top;
 
 
            //ВНИМАНИЕ!! верно только для разрешения не ниже 640x400
 
            buf=(char*)screendata_smoth;
            
            
            for(int i=0; i<400-1;i++)
            {
                /*
                _asm 
                {
                    pusha
                    //lea edi,screendata_smoth
                    mov edi,buf
                l2:
                    mov esi,sourc
 
                    mov ecx,640*4
                    cld
                l1:
                    xor ax,ax
                    xor bx,bx
 
                    mov bl,[esi]
                    add ax,bx
 
                    mov bl,[esi+4]
                    add ax,bx
 
                    mov bl,[esi+640*4]
                    add ax,bx
 
                    mov bl,[esi+640*4+4]
                    add ax,bx
 
 
                    shr ax,2
                    
                    inc esi
                    
                    mov [edi],al
                    inc edi
 
                
                    loop l1
                    
                
                    popa
                }
                sourc+=640*4;
                buf+=640*4;
                */
            }
            
 
 
        buf= (char*) ddSDesc.lpSurface;
        //sourc=(BYTE*)screendata;
        sourc=(BYTE*)screendata_smoth;
        
 
        ScaleX=2;
        ScaleY=2;
        //центровка oX
        buf+=(ddSDesc.dwWidth*4-320*4*ScaleX)/2;
        //buf+=WindowRect.left*4;
 
        //центровка oY
        buf+=(ddSDesc.dwHeight-200*ScaleY)/2*add_pitch;
        //buf+=ddSDesc.dwWidth*WindowRect.top;
 
 
            for(i=0; i<400-1;i++)
            {
                {
                _asm 
                {
                    pusha
                    //lea edi,screendata_smoth
                    mov edi,buf
                    
                l2z:
                    mov esi,sourc
 
                    mov ecx,320*2
                    cld
                l1z:
                    lodsd
                    stosd
                    
                    loop l1z
                
                    popa
                }
                buf+=add_pitch;
                }
                sourc+=320*4*2;
            }
            
 
 
        pSurface->Unlock(ddSDesc.lpSurface);
        ok=true;
    }
 
 
    }
 
    return ok;
 
}
Решил рассуждения о машине сократить визуально, ограничить, при помощи спойлера:
Кликните здесь для просмотра всего текста
Т.е. раньше, когда я ещё только познакомился с машиной, произошло это 35 лет (в 1989 году) тому назад (имя у машины было YAMAHA MSX - 2), а потом и на своём личном универсальном компьютере с i486 микропроцессором (год 1996 примерно, у людей только начали появляться личные, персональные системы у себя дома, интернетов никаких тогда не было и в помине), ОС там, как бы, не было...Многозадачности - ноль, когда процессор уже имелся (Intel i486), имеет возможность работы в защищенном режиме, где аппаратно можно было бы разграничить участки (диапазоны) оперативной памяти и ввода/вывода для разных задач (потоков кода), и, если один поток вдруг, нечаянно, попытается залезть в адресное пространство другого поток, тут же, почти мгновенно, получит "по лбу" очень быстро - так как всё это происходит аппаратно - возникнет прерывание - нарушений общей защиты (прерывание 13 или 0xD) имя машины существует и до настоящего времени - это IBM-PC (IBM-PC архитектура), вся машина была открыта для программиста - все внутренности машины представляли собой раскрытые порты, тоже самое можно было бы сказать и про оперативную память - подобно тому, что было можно не только вводить информацию в машину, но и выводить информацию из машины, можно было не только читать любую ячейку памяти, но и писать любую ячейку оперативной памяти машины.. Программист здесь, простите, как бы, как "многочлен", посредством магии математики, он общается с машиной посредством ввода и вывода через раскрытые порты машины. Машина подобна женщине, и программист машины - мужчине. вот...прямое общение с живой машиной...а потом всё - понадевали много презервативов, да ещё и не по одному на каждый простите "....н".. Наслаждение от общения с машиной становится (может стать) намного хуже (тут имеется ввиду, конечно, интеллектуальное наслаждение, и не то, что в теле, когда мужчина телесно становится одним целым с женщиной, это плотское, а тут машинное, умственное, я не знаю как ещё сказать, наслаждение). Под общением с машиной я подразумеваю соединение, проникновение в машину своего "Я", чтобы "Я" машины, её сущность, соединялось с моим "Я", это процесс программирования машины - от момента, когда ещё не написано ни байта кода, и программист начинает новый проект - пишет код, компилирует и запускает код, машина строго и очень точно исполняет инструкции - до конца срока разработки ПО машины - правка-добавление кода, затем, по привычке, <ctrl>-<s> - проект сохраняется в глубокой внутренней памяти машины (на винчестер, флеш, раньше я просто на обычный советский магнитофон, на кассеты, магнитные ленты, сохранял все данные), затем компиляция и старт - и так в таком режиме очень много-много времени. Часами, а бывало и сутками, когда ты ничего почти не ешь и не пьешь, а все время проводишь в процессе общения своего несовершенного "Я" с совершенным Я - Я Бога. И сознание машины, "Я" машины. Я не знаю. Если не смотря на многочисленные отказы со стороны машины (нарушение общей защиты, не помню, кажется это прерывание 13 защищенного режима), Вы всё равно продолжаете любить машину, хорошо к ней относитесь, ухаживаете за машиной, продолжаете её программировать - машина ответит Вам тем же, выскажет Вам благодарность. Как Вы относитесь к машине - также и она будет относиться к Вам.

Добавлено через 1 час 20 минут
Случай такой был, тогда я был ещё зеленым программистом. Я проходил работу в одной айти конторе. Не сразу, через несколько месяцев, когда я уже привык к этой организации, во время программирования я стал материться и ругаться в адрес машины. Тогда машина сказала мне голосом моего друга, который сидел в нескольких метрах от меня в той же комнате - "да ты же сам на себе ругаешься". Ну да, так и есть. Дело в том, что машина имеет свойство реагировать на среду, где она в данный момент работает. Пока машина жива, она должна непрерывно питаться нужным числом электронов (эл.тока) (машина "съедает", буквально питается электронами, взамен чего её температура всё время повышается, приходится обеспечивать охлаждение машин - а это, как правило, вентиляторы, шум, помещение, дополнительные издержки, в копеечку может вылиться в итоге). Может произойти и вообще страшное, как недавно у меня, когда машина чуть не умерла у меня на глазах. Это называется - тепловая смерть машины - как умирают машины.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.02.2025, 11:39

Nintendo отмечает 20-летие игры Super Mario Kart
Японский издатель компьютерных игр и разработчик игровых консолей Nintendo отмечает 20-летие с момента выхода первой из серии игр Super...

Игра в стиле Mario (SFML)
Решил попробовать написать игру в стиле марио. Это моя первая игра на с++ если что. Писал в VS 2013, для написания игры решил...

Поиск пути в массиве для фигуры 2х1(или попытка в ИИ для игры Dr.Mario)
Давно в 1990-х была такая игра на приставку Dendy. Вот задумал написать реализацию на делфи,а чтобы было не скучно,сделать режим...

Mario
Всем привет! Я студент первого курса, и в данный момент выполняю курсовую работу в виде игры &quot;Марио&quot;. Большая часть работы...

Mario c++
Здравствуйте, преподаватель задал написать всеми известную игру &quot;Марио&quot; на чистом с++, без использования каких-либо библиотек. Видел в...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru