Форум программистов, компьютерный форум, киберфорум
Наши страницы
JavaScript
Войти
Регистрация
Восстановить пароль
 
Alikberov
5 / 17 / 4
Регистрация: 03.05.2017
Сообщений: 54
Завершенные тесты: 1
#1

«Тетрис» за пару часов…

07.09.2017, 15:31. Просмотров 244. Ответов 4

Здравствуйтe!

Данный форум давно знаю из гугл-поиска по всяким Win-API проблемам.
Сейчас заметил, что ни одного сообщения здесь не имею…
Пока выкладываю свой «Тетрис», который писал лишь для демонстрации, на сколько концепция кода игры проста…
HTML5
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
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<meta http-equiv='refresh' content='3600; url=http://www.cyberforum.ru/members/1009076.html' />
<title>Tetris</title>
<style type='text/css'>
body
{
        background-color        :buttonface;
        background-image        :url();
        background-repeat       :no-repeat;
        color                   :black;
        margin-top              :0px;
        margin-left             :0px;
        margin-right            :0px;
        margin-bottom           :0px;
        overflow                :auto;
}
pre
{
        color                   :black;
}
</style>
<hta:application
        applicationName         ='Alikberov'
        border                  ='yes'
        contextMenu             ='no'
        icon                    ='Alikberov.ico'
        innerBorder             ='no'
        maximizeButton          ='yes'
        navigable               ='yes'
        scroll                  ='yes'
        selection               ='yes'
        singleInstance          ='yes'
>
</hta:application>
<script for='window' event='onload' language='javascript'>
        setTimeout("window.resizeTo(160, 320)", 0);
        for(i = 0; i < 16; ++ i)
                for(j = 0, field[i] = []; j < 16; ++ j)
                        field[i].push("0");
        Draw();
</script>
<script for='document' event='onkeydown' language='javascript'>
        var
                xx = x, ff = figure;
        switch(event.keyCode) {
        case 37:        -- x; break;
        case 38:        figure = (figure & 0x4FFFF) | ((figure + 0x30000) & 0x30000); break;
        case 39:        ++ x; break;
        default:        return;
        }
        fig = SetFigure(figure, x, y);
        if(fig == true)
                return x = xx, figure = ff;
        document.getElementsByTagName("pre")[0].innerText = fig.join("").replace(/,/g, "").replace(/0/g, "·")
                                                                //      .replace(/1/g, "X")
                                                                        .replace(/(.{16})/g, "$1\r\n");
</script>
<script language='javascript'>
var
        x = 10, y = 0, z = 0, figure = 0, score = 0,
        field = [],
        rotate = [0, 5, 3, 6, 4, 1, 7, 2],
        cubic = [
                0x2222, //      I
                0x04E0, //      T
                0x0644, //      L
                0x0630, //      S
                0x0660          //      O
                ];
function SetFigure(code, x, y, z) {
        var
                result = [],
                i1, j1, rot = rotate[code >> 16],
                ci = rot & 0x1 ? 3 : 0,
                cj = rot & 0x2 ? 3 : 0,
                cs = rot & 0x4 ? true : false;
        for(i = 0; i < 16; ++ i)
                result[i] = [].concat(field[i]);
        for(i = 0; i < 4; ++ i) {
                for(j = 0; j < 4; ++ j) {
                        if(cs)
                                i1 = j ^ cj, j1 = i ^ ci;
                        else
                                i1 = i ^ ci, j1 = j ^ cj;
                        i1 += y;
                        j1 += x;
                        if(code & 1) {
                                if(((i1 + 32) % 32) > 15 || ((j1 + 32) % 32) > 15 || result[i1][j1] != "0")
                                        return true;
                                result[i1][j1] = String.fromCharCode(0x23, 0x25, 0x40, 0xA9, 0xAE).charAt(z);
                        }
                        code >>= 1;
                }
        }
        return result;
}
function Draw() {
        var
                fig, k, l;
        if(figure == 0) {
                figure = Math.floor(Math.random() * 0x80000) & 0x7FFFF;
                z = figure % 5;
                figure = (figure & 0x70000) | cubic[figure % cubic.length];
                x = 7, y = 0;
        }
        fig = SetFigure(figure, x, y, z);
        if(fig == true) {
                score += 1 + z;
                figure = 0;
        } else {
                document.getElementsByTagName("pre")[0].innerText = fig.join("").replace(/,/g, "").replace(/0/g, "·")
                                                                        //      .replace(/1/g, "X")
                                                                                .replace(/(.{16})/g, "$1\r\n") + "\r\nSCORE: " + score;
                if(SetFigure(figure, x, y += 1) == true) {
                        figure = 0;
                        for(i = 0; i < 16; ++ i)
                                field[i] = [].concat(fig[i]);
                        for(i = 15, l = 0; i > 0; -- i) {
                                k = 0;
                                for(j = 0; j < 16; ++ j) {
                                        if(field[i][j] != "0")
                                                ++ k;
                                }
                                if(k == 16) {
                                        ++ l;
                                        for(k = i ++; k > 0; -- k)
                                                for(j = 0; j < 16; ++ j)
                                                        field[k][j] = field[k - 1][j];
                                        document.getElementsByTagName("pre")[0].innerText = fig.join("").replace(/,/g, "").replace(/0/g, "·")
                                                                                                //      .replace(/1/g, "X")
                                                                                                        .replace(/(.{16})/g, "$1\r\n") + "\r\nSCORE: " + score;
                                }
                        }
                        score += l << z;
                }
        }
        setTimeout(Draw, 700 - (score >> 4));
}
</script>
<body onload='Draw()'>
<pre></pre>
</body>
</html>
P.S.: Надеюсь,*первый пост не будет «комом» в моей репутации…
Спасибо за внимание…
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2017, 15:31
Ответы с готовыми решениями:

каким способом можжно сделать скрипт похожий на тетрис
Здравствуйте, помогите реализовать идею. есть например таблица или сетка...

date('r') + пару часов
У меня есть такой код: &lt;?php //у меня есть $hhh=&quot;02&quot;; ...

Прибавить пару часов date()
В базе хранится время в unix формате. Как к нему прибавить 12 часов часов? ...

Нужна девушка -программист на пару часов:)
Очень нужна ваша помощь в институте, если есть у кого возможность или знакомые,...

Колонки греется динамик по истечении пару часов
Кто подскажет нормальное ли это состояние когда поистечении 2-3 часов греется...

4
dailydose
659 / 205 / 88
Регистрация: 21.07.2016
Сообщений: 1,027
Записей в блоге: 2
Завершенные тесты: 1
08.09.2017, 13:18 #2
Цитата Сообщение от Alikberov Посмотреть сообщение
не будет «комом
a.html:40 Uncaught ReferenceError: field is not defined
at a.html:40
(anonymous) @ a.html:40
0
TFullControl
398 / 322 / 189
Регистрация: 20.10.2016
Сообщений: 1,024
08.09.2017, 13:39 #3
dailydose, это hta приложение, сохраните код в файл с расширением .hta и запустите.
1
nubideus
390 / 272 / 76
Регистрация: 19.09.2011
Сообщений: 828
08.09.2017, 14:29 #4
идея с байтами мне понравилась, но разбираться в этом коде не самое большое удовольствие, настоятельно рекомендую к прочтению это https://learn.javascript.ru/coding-style

прикрепил рабочий файл. так же нужно было сохранять в кирилической виндосовской кодировке.
0
Вложения
Тип файла: zip tetris.zip (1.7 Кб, 5 просмотров)
FlasherX
489 / 213 / 88
Регистрация: 06.06.2017
Сообщений: 900
09.09.2017, 01:10 #5
Что-то я не понял, почему HTA перенесли в JavaScript из раздела для HTA...
0
09.09.2017, 01:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2017, 01:10

Диск C заполняется сам по себе за пару часов
Забивается папка Temp файликами типа aria-debug-15132.log пока на нем мегабайт...

В разных браузерах раз в пару часов открываются страницы с рекламой
Казино и прочее. Антивирусы и прочие сканеры ничего не нашли, но во время...

Что прочитать, чтобы выучить PascalABC за пару часов, владея C#?
Я хорошо знаю C#, знаком с синтаксисом java. В школе сейчас (ну как сейчас,...


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

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

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