|
08.08.2012, 06:31
|
#1
|
Модератор
Регистрация: 23.10.2005
Сообщений: 219
Написано 62 полезных сообщений (для 247 пользователей)
|
Гнусный Тетрис
он будет каждый раз выдавать вам самую неудобную фигуру
попробуйте хотя бы немного продержаться и с позором проиграйте
управление:
стрелки - двигать фигуру
q, w - вращать фигуру
Скачать скомпиленную версию ( 150KB )
Исходники:
SuperStrict
Framework brl.glmax2d
Import brl.random
SeedRnd Millisecs()
Const SquareSize:Int = 24
Global World:Int[ 21, 23 ]
Global TempWorld:Int[ 21, 23 ]
Global Figure:Int[ 7, 4, 4, 4 ]
Global Phases:Int[ 7 ]
Global XShift:Int[][] = [ [ 0 ], [ 0, 0 ], [ 0, 0 ], [ 1, 0 ], [ 0, 1, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 1, 0, 0 ] ]
Global YShift:Int[][] = [ [ 2 ], [ 2, 2 ], [ 3, 1 ], [ 4, 2 ], [ 2, 3, 2, 3 ], [ 2, 3, 3, 1 ], [ 2, 3, 2, 2 ] ]
Local M:Int = 0
For Local S:String = Eachin "ABEF,AEFJEFBC,IEFBABFG,BFJNEFGH,AEFGCBFJEFGKIJFB,EFGCBFJKIEFGABFJ,EFBGBFGJEFGJBEFJ".Split(",")
Phases[ M ] = S.Length / 4 - 1
For Local I:Int = 0 To Phases[ M ]
For Local J:Int = 0 To 3
Local A:Int = S[ I * 4 + J ] - 65
Figure[ M, I, A & 3, A Shr 2 ] = True
Next
Next
M :+ 1
Next
Graphics SquareSize * 14, SquareSize * 21 + 16
For Local I:Int = 0 To 20
World[ 1, I ] = True
World[ 12, I ] = True
World[ I, 20 ] = True
Next
Local X:Int = 0, Y:Int = 19, R:Int = 0, T:Int = 0, N:Int = 0, Score:Int = 0
Repeat
Cls
For Local I:Int = 0 To 20
For Local J:Int = 1 To 12
If World[ J, I ] Then DrawRect J * SquareSize, I * SquareSize, SquareSize, SquareSize
Next
Next
For Local I:Int = 0 To 3
For Local J:Int = 0 To 3
If Figure[ N, R, I, J ] Then DrawRect ( X + I ) * SquareSize, ( Y + J ) * SquareSize, SquareSize, SquareSize
Next
Next
DrawText "Score: " + Score, SquareSize * 7 - 4 * ( 7 + String( Score ).Length ), SquareSize * 21
Flip
Local A:Int = X + KeyHit( KEY_RIGHT ) - KeyHit( KEY_LEFT )
Local B:Int = Y + KeyDown( KEY_DOWN )
Local Q:Int = ( R + KeyHit( KEY_W ) - KeyHit( KEY_Q ) ) & Phases[ N ]
IF Not CheckPosition( A, B, N, Q ) Then
X = A
Y = B
R = Q
End If
Local M:Int = Millisecs()
If M > T Then
T = M + 999
If CheckPosition( X, Y + 1, N, R ) Then
If Y = 0 Then End
For Local I:Int = 0 To 3
For Local J:Int = 0 To 3
If Figure[ N, R, I, J ] Then World[ X + I, Y + J ] = True
Next
Next
Local Counter:Int = 0
Local D:Int = 0
For Local J:Int = 19 To 0 Step -1
Local Quantity:Int = 0
For Local I:Int = 2 To 11
If World[ I, J ] Then Quantity :+ 1
World[ I, J + D ] = World[ I, J ]
Next
If Quantity > 9 Then
D :+ 1
Counter :+ 1
Score :+ Counter
End If
Next
X = 5
Y = - 1
N = Decide()
EndIf
Y :+ 1
End If
Until KeyHit( KEY_ESCAPE )
Function CheckPosition:Int( X:Int, Y:Int, N:Int, R:Int )
For Local I:Int = 0 To 3
For Local J:Int = 0 To 3
If Figure[ N, R, I, J ] * World[ I + X, J + Y ] Then Return True
Next
Next
EndFunction
Function Decide:Int()
Local CurrentScore:Int = 0
Local CurrentN:Int = 0
For Local N:Int = 0 To 6
Local Score:Int = 999
For Local R:Int = 0 To Phases[ N ]
For Local X:Int = 2 To 11
For Local Y:Int = 4 To 19
If Not World[ X, Y ] And World[ X, Y + 1 ] Then
Local XX:Int = X - XShift[ N ][ R ]
Local YY:Int = Y + 1 - YShift[ N ][ R ]
If CheckPosition( XX, YY, N, R ) Then Continue
Score = Min( Score, Calculate( XX, YY, N, R ) )
End If
Next
Next
Next
If Score >= CurrentScore Then
If Score = CurrentScore Then If Rand( 0, 1 ) Then Continue
CurrentScore = Score
CurrentN = N
End If
Next
Return CurrentN
End Function
Function Calculate:Int( X:Int, Y:Int, N:Int, R:Int )
For Local X:Int = 2 To 11
For Local Y:Int = 0 To 20
TempWorld[ X, Y ] = World[ X, Y ]
Next
Next
For Local I:Int = 0 To 3
For Local J:Int = 0 To 3
If Figure[ N, R, I, J ] Then TempWorld[ X + I, Y + J ] = True
Next
Next
Local Score:Int = 0
Local CurrentHeight:Int
For Local I:Int = 2 To 11
For Local J:Int = 0 To 20
If TempWorld[ I, J ] Then
If I > 2 Then Score :+ Abs( J - 1 - CurrentHeight )
CurrentHeight = J - 1
Exit
End If
Next
For Local J:Int = 1 To 19
If Not TempWorld[ I, J ] And TempWorld[ I, J - 1 ] Then Score :+ 16
Next
Next
Return Score
End Function
Последний раз редактировалось Matt Merkulov, 08.08.2012 в 13:10.
|
(Offline)
|
|
Эти 17 пользователя(ей) сказали Спасибо Matt Merkulov за это полезное сообщение:
|
ARA (08.08.2012), cahekp (08.08.2012), dimanche13 (08.08.2012), FireOwl (08.08.2012), FREE MAN (08.08.2012), Gector (08.08.2012), HolyDel (08.08.2012), L.D.M.T. (08.08.2012), Mhyhr (08.08.2012), Nex (08.08.2012), pepel (08.08.2012), Randomize (08.08.2012), Reks888 (08.08.2012), St_AnGer (08.08.2012), Tadeus (08.08.2012), Жека (08.08.2012), Черный крыс (12.08.2012)
|
08.08.2012, 06:59
|
#2
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Ответ: Гнусный Тетрис
Ты злодей.
|
(Offline)
|
|
Эти 10 пользователя(ей) сказали Спасибо Жека за это полезное сообщение:
|
|
08.08.2012, 07:31
|
#3
|
ТЫ ЧООО?
Регистрация: 26.02.2007
Сообщений: 3,369
Написано 2,020 полезных сообщений (для 7,192 пользователей)
|
Ответ: Гнусный Тетрис
Рекорд - 6.
Тетрис и правда злобный.
|
(Offline)
|
|
08.08.2012, 10:23
|
#4
|
Элита
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений (для 2,828 пользователей)
|
Ответ: Гнусный Тетрис
рекорд - 9 с 8-й попытки
__________________
Main PC:
Intel Core i5 4260U 1.44 GHz + LPDDR3 1x4096 1600 MHz + Intel HD Graphics 5000.
Asus Ёжик T101-MT:
Intel Atom N-570 1.66 Ghz + DDR2 2x1024 800 Mhz + Intel GMA 3150 128 Mb DDR2
Скачать Doom 2D: Remake v0.3.8a
|
(Offline)
|
|
08.08.2012, 11:27
|
#5
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Ответ: Гнусный Тетрис
И ещё - мне до такой лаконичности кода далековато (хоть и не стремлюсь к ней), склоняюсь перед профессионализмом автора.
|
(Offline)
|
|
08.08.2012, 11:33
|
#6
|
Модератор
Регистрация: 23.10.2005
Сообщений: 219
Написано 62 полезных сообщений (для 247 пользователей)
|
Ответ: Гнусный Тетрис
это частично потому что я переписал свой старый код тетриса-тысячесимвольника
там были использованы всякие извраты чтобы сократить объем кода
|
(Offline)
|
|
08.08.2012, 12:20
|
#7
|
Мастер
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений (для 252 пользователей)
|
Ответ: Гнусный Тетрис
6
вот я лох-то ))))))) в тетрис играть не умею
|
(Offline)
|
|
08.08.2012, 12:21
|
#8
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Гнусный Тетрис
1...
|
(Offline)
|
|
08.08.2012, 12:56
|
#9
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Гнусный Тетрис
а почему вращение на такие экзотические клавиши, а не на православное "вверх"?
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
08.08.2012, 13:08
|
#10
|
Модератор
Регистрация: 23.10.2005
Сообщений: 219
Написано 62 полезных сообщений (для 247 пользователей)
|
Ответ: Гнусный Тетрис
вращать надо уметь в обе стороны, чтобы клавиши были рядом
хотя сейчас пальцы автоматом ставятся на WASD, так что мб A/D было бы лучше, согласен
(укрупнил поле, перезалил экзешник)
|
(Offline)
|
|
08.08.2012, 13:13
|
#11
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Гнусный Тетрис
кстати, работает в убунте под вайном.
в новой версии набрал 5.
|
(Offline)
|
|
08.08.2012, 14:39
|
#12
|
Мастер
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений (для 252 пользователей)
|
Ответ: Гнусный Тетрис
Сообщение от HolyDel
кстати, работает в убунте под вайном.
|
этож БМ. можно скомпилить для линукса нативный бинарник и никакой вайн будет не нужен.
7
|
(Offline)
|
|
08.08.2012, 14:42
|
#13
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Гнусный Тетрис
а можно запустить под вайном и никакой нативный бинарник будет не нужен
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 04:07.
|