filipinomemes 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +18 -0
- data/.rspec +2 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +602 -0
- data/Rakefile +6 -0
- data/_config.yml +1 -0
- data/bin/filipinomemes +21 -0
- data/filipinomemes.gemspec +26 -0
- data/lib/filipinomemes.rb +3 -0
- data/lib/filipinomemes/compiler.rb +21 -0
- data/lib/filipinomemes/core_ext.rb +8 -0
- data/lib/filipinomemes/core_ext/array.rb +19 -0
- data/lib/filipinomemes/core_ext/class.rb +4 -0
- data/lib/filipinomemes/core_ext/enumerator.rb +3 -0
- data/lib/filipinomemes/core_ext/integer.rb +4 -0
- data/lib/filipinomemes/core_ext/kernel.rb +13 -0
- data/lib/filipinomemes/core_ext/module.rb +4 -0
- data/lib/filipinomemes/core_ext/range.rb +6 -0
- data/lib/filipinomemes/core_ext/string.rb +13 -0
- data/lib/filipinomemes/ruby_parser_patches.rb +156 -0
- data/lib/filipinomemes/version.rb +3 -0
- data/sample_programs/agapan.bt +5 -0
- data/sample_programs/alyas.bt +9 -0
- data/sample_programs/batotris.bt +286 -0
- data/sample_programs/bilang.bt +10 -0
- data/sample_programs/dapat.bt +9 -0
- data/sample_programs/habang.bt +7 -0
- data/sample_programs/ihinto.bt +8 -0
- data/sample_programs/kontrol-sa-pagiikot.bt +45 -0
- data/sample_programs/kumusta_mundo.bt +5 -0
- data/sample_programs/magbibigay.bt +27 -0
- data/sample_programs/maliban_na.bt +12 -0
- data/sample_programs/modyul.bt +20 -0
- data/sample_programs/nakatukoy.bt +13 -0
- data/sample_programs/ngunit_kapag.bt +8 -0
- data/sample_programs/o_ang.bt +3 -0
- data/sample_programs/pamamaraan-sa-pagkakamali.bt +11 -0
- data/sample_programs/pangalan.bt +10 -0
- data/sample_programs/panguri.bt +13 -0
- data/sample_programs/panuntunan.bt +23 -0
- data/sample_programs/para_sa.bt +4 -0
- data/sample_programs/pibonasyi.bt +59 -0
- data/sample_programs/siguraduhin.bt +8 -0
- data/sample_programs/tanggalin.bt +23 -0
- data/sample_programs/timebomb.bt +36 -0
- data/spec/filipinomemes/compiler_spec.rb +116 -0
- data/spec/spec_helper.rb +61 -0
- metadata +152 -0
data/Rakefile
ADDED
data/_config.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
theme: jekyll-theme-cayman
|
data/bin/filipinomemes
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'filipinomemes/compiler'
|
3
|
+
require 'rubygems'
|
4
|
+
|
5
|
+
if ARGV[0].nil?
|
6
|
+
puts <<-EOS
|
7
|
+
Unknown file. The correct syntax is:
|
8
|
+
|
9
|
+
filipinomemes file.bt
|
10
|
+
EOS
|
11
|
+
else
|
12
|
+
ARGV.each do |file|
|
13
|
+
next unless file
|
14
|
+
compiler = Filipinomemes::Compiler.new
|
15
|
+
code = File.read file, encoding: 'utf-8'
|
16
|
+
ruby_code = compiler.sa_ruby code
|
17
|
+
raise 'The lowest version of Ruby needed is 2.4' if
|
18
|
+
Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.3')
|
19
|
+
eval ruby_code
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'filipinomemes/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'filipinomemes'
|
8
|
+
spec.version = Filipinomemes::VERSION
|
9
|
+
spec.authors = ['Jan Paul Carag']
|
10
|
+
spec.email = ['zephyrum14@gmail.com']
|
11
|
+
spec.description = 'Filipinomemes Programming Language'
|
12
|
+
spec.summary = 'Filipinomemes is a programming language that uses filipino memes as its syntax'
|
13
|
+
spec.homepage = 'https://github.com/zephyrum14/filipinomemes'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
|
21
|
+
spec.add_dependency 'ruby2ruby'
|
22
|
+
|
23
|
+
spec.add_development_dependency 'bundler'
|
24
|
+
spec.add_development_dependency 'rake'
|
25
|
+
spec.add_development_dependency 'rspec'
|
26
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'ruby2ruby'
|
2
|
+
require 'ruby_parser'
|
3
|
+
require 'filipinomemes/ruby_parser_patches'
|
4
|
+
|
5
|
+
module Filipinomemes
|
6
|
+
class Compiler
|
7
|
+
def initialize; end
|
8
|
+
|
9
|
+
STARTING_CODE = "# encoding: utf-8\nrequire \"filipinomemes/core_ext\"\n".freeze
|
10
|
+
|
11
|
+
def zephyrum(code)
|
12
|
+
ruby2ruby = Ruby2Ruby.new
|
13
|
+
parser = RubyParser.new
|
14
|
+
sexp = parser.process("# encoding: utf-8\n#{code}")
|
15
|
+
|
16
|
+
ruby_code = ruby2ruby.process(sexp)
|
17
|
+
|
18
|
+
"#{STARTING_CODE}#{ruby_code}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
require 'filipinomemes/core_ext/kernel'
|
2
|
+
require 'filipinomemes/core_ext/string'
|
3
|
+
require 'filipinomemes/core_ext/array'
|
4
|
+
require 'filipinomemes/core_ext/enumerator'
|
5
|
+
require 'filipinomemes/core_ext/integer'
|
6
|
+
require 'filipinomemes/core_ext/range'
|
7
|
+
require 'filipinomemes/core_ext/class'
|
8
|
+
require 'filipinomemes/core_ext/module'
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class Array
|
2
|
+
alias baliktad reverse
|
3
|
+
alias umikot cycle
|
4
|
+
alias isuksok inject
|
5
|
+
alias magbagsak drop
|
6
|
+
alias itulak push
|
7
|
+
alias pasok push
|
8
|
+
alias ipasok push
|
9
|
+
alias huli last
|
10
|
+
alias gg last
|
11
|
+
alias una first
|
12
|
+
alias isaisahin each
|
13
|
+
alias kada each
|
14
|
+
alias bawat each
|
15
|
+
alias kada_isa each
|
16
|
+
alias sa_bawat_isa each
|
17
|
+
alias bilang_bawat_isa each_with_index
|
18
|
+
alias haba length
|
19
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Kernel
|
2
|
+
alias isulat puts
|
3
|
+
alias sabihin puts
|
4
|
+
alias iprint puts
|
5
|
+
alias mag_print puts
|
6
|
+
alias ilimbag puts
|
7
|
+
alias mag_limbag puts
|
8
|
+
alias itatak puts
|
9
|
+
alias mag_tatak puts
|
10
|
+
alias iangat raise
|
11
|
+
alias itaas raise
|
12
|
+
alias matulog sleep
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class String
|
2
|
+
alias baliktad reverse
|
3
|
+
alias haba length
|
4
|
+
alias sa_malaking_titik capitalize
|
5
|
+
alias sa_malalaking_titik upcase
|
6
|
+
alias sa_malaking_mga_titik upcase
|
7
|
+
alias sa_maliliit_na_titik downcase
|
8
|
+
alias sa_maliit_na_mga_titik downcase
|
9
|
+
alias igitna center
|
10
|
+
alias kagatan chomp
|
11
|
+
alias palitan replace
|
12
|
+
alias siyasatin inspect
|
13
|
+
end
|
@@ -0,0 +1,156 @@
|
|
1
|
+
class RubyLexer
|
2
|
+
def parse_number
|
3
|
+
self.lex_state = :expr_end
|
4
|
+
|
5
|
+
if src.scan(/[+-]?0[xXbBdD]\b/)
|
6
|
+
rb_compile_error 'Invalid numeric format'
|
7
|
+
# elsif src.scan(/[+-]?(?:(?:[1-9][\d_]*|0)(?!\.\d)\b|0[Dd][0-9_]+)/)
|
8
|
+
elsif src.scan(/[+-]?(?:(?:[1-9][\d_]*|0)(?!\,\d)\b|0[Dd][0-9_]+)/)
|
9
|
+
int_with_base(10)
|
10
|
+
elsif src.scan(/[+-]?0x[a-f0-9_]+/i)
|
11
|
+
int_with_base(16)
|
12
|
+
elsif src.scan(/[+-]?0[Bb][01_]+/)
|
13
|
+
int_with_base(2)
|
14
|
+
elsif src.scan(/[+-]?0[Oo]?[0-7_]*[89]/)
|
15
|
+
rb_compile_error 'Illegal octal digit.'
|
16
|
+
elsif src.scan(/[+-]?0[Oo]?[0-7_]+|0[Oo]/)
|
17
|
+
int_with_base(8)
|
18
|
+
elsif src.scan(/[+-]?[\d_]+_(e|\.)/)
|
19
|
+
rb_compile_error "Trailing '_' in number."
|
20
|
+
# elsif src.scan(/[+-]?[\d_]+\.[\d_]+(e[+-]?[\d_]+)?\b|[+-]?[\d_]+e[+-]?[\d_]+\b/i)
|
21
|
+
elsif src.scan(/[+-]?[\d_]+\,[\d_]+(e[+-]?[\d_]+)?\b|[+-]?[\d_]+e[+-]?[\d_]+\b/i)
|
22
|
+
number = src.matched.sub(',', '.')
|
23
|
+
rb_compile_error 'Invalid numeric format' if number =~ /__/
|
24
|
+
self.yacc_value = number.to_f
|
25
|
+
:tFLOAT
|
26
|
+
elsif src.scan(/[+-]?[0-9_]+(?![e])/)
|
27
|
+
int_with_base(10)
|
28
|
+
else
|
29
|
+
rb_compile_error 'Bad number format'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
module RubyParserStuff
|
35
|
+
class Keyword
|
36
|
+
wordlist = [
|
37
|
+
['glhf', %i[kBEGIN kBEGIN], :expr_beg],
|
38
|
+
['wala_na', %i[kBEGIN kBEGIN], :expr_beg],
|
39
|
+
['finish_na', %i[kEND kEND], :expr_end],
|
40
|
+
['gg', %i[kEND kEND], :expr_end],
|
41
|
+
['els', %i[kELSE kELSE], :expr_beg],
|
42
|
+
['ginagawa_mue', %i[kELSE kELSE], :expr_beg],
|
43
|
+
['kays', %i[kCASE kCASE], :expr_beg],
|
44
|
+
['hakdog', %i[kCASE kCASE], :expr_beg],
|
45
|
+
['siguraduhing', %i[kENSURE kENSURE], :expr_beg],
|
46
|
+
['siguraduhin', %i[kENSURE kENSURE], :expr_beg],
|
47
|
+
['modyul', %i[kMODULE kMODULE], :expr_beg],
|
48
|
+
['grupo', %i[kMODULE kMODULE], :expr_beg],
|
49
|
+
['elsip', %i[kELSIF kELSIF], :expr_beg],
|
50
|
+
['agik_ginagawa_mue', %i[kELSIF kELSIF], :expr_beg],
|
51
|
+
['ang', %i[kDEF kDEF], :expr_fname],
|
52
|
+
['panuntunang', %i[kDEF kDEF], :expr_fname],
|
53
|
+
['panuntunan', %i[kDEF kDEF], :expr_fname],
|
54
|
+
['iligtas', %i[kRESCUE kRESCUE_MOD], :expr_mid],
|
55
|
+
['agapan', %i[kRESCUE kRESCUE_MOD], :expr_mid],
|
56
|
+
['hindi', %i[kNOT kNOT], :expr_beg],
|
57
|
+
['dapat', %i[kTHEN kTHEN], :expr_beg],
|
58
|
+
['bigyang_daan', %i[kYIELD kYIELD], :expr_arg],
|
59
|
+
['magbigay_daan', %i[kYIELD kYIELD], :expr_arg],
|
60
|
+
['para_sa', %i[kFOR kFOR], :expr_beg],
|
61
|
+
['para_ang', %i[kFOR kFOR], :expr_beg],
|
62
|
+
['mayselp', %i[kSELF kSELF], :expr_end],
|
63
|
+
['magisa', %i[kSELF kSELF], :expr_end],
|
64
|
+
['mali', %i[kFALSE kFALSE], :expr_end],
|
65
|
+
['neba_gibap', %i[kRETRY kRETRY], :expr_end],
|
66
|
+
['ibalik', %i[kRETURN kRETURN], :expr_mid],
|
67
|
+
['ibalik_ang', %i[kRETURN kRETURN], :expr_mid],
|
68
|
+
['magbalik', %i[kRETURN kRETURN], :expr_mid],
|
69
|
+
['magbalik_nang', %i[kRETURN kRETURN], :expr_mid],
|
70
|
+
['isauli', %i[kRETURN kRETURN], :expr_mid],
|
71
|
+
['isauli_ang', %i[kRETURN kRETURN], :expr_mid],
|
72
|
+
['ibigay', %i[kRETURN kRETURN], :expr_mid],
|
73
|
+
['ibigay_ang', %i[kRETURN kRETURN], :expr_mid],
|
74
|
+
['magbigay', %i[kRETURN kRETURN], :expr_mid],
|
75
|
+
['magbigay_nang', %i[kRETURN kRETURN], :expr_mid],
|
76
|
+
['truts', %i[kTRUE kTRUE], :expr_end],
|
77
|
+
['istroo', %i[kTRUE kTRUE], :expr_end],
|
78
|
+
['ip', %i[kIF kIF_MOD], :expr_beg],
|
79
|
+
['agik', %i[kIF kIF_MOD], :expr_beg],
|
80
|
+
['nakatukoy?', %i[kDEFINED kDEFINED], :expr_arg],
|
81
|
+
['nakasaad?', %i[kDEFINED kDEFINED], :expr_arg],
|
82
|
+
['super', %i[kSUPER kSUPER], :expr_arg],
|
83
|
+
['tanggalin', %i[kUNDEF kUNDEF], :expr_fname],
|
84
|
+
['magtanggal', %i[kUNDEF kUNDEF], :expr_fname],
|
85
|
+
['tama_na', %i[kBREAK kBREAK], :expr_mid],
|
86
|
+
['auko_na', %i[kBREAK kBREAK], :expr_mid],
|
87
|
+
['sa', %i[kIN kIN], :expr_beg],
|
88
|
+
['sa_loob_ng', %i[kIN kIN], :expr_beg],
|
89
|
+
['nasa', %i[kIN kIN], :expr_beg],
|
90
|
+
['na_nasa', %i[kIN kIN], :expr_beg],
|
91
|
+
['yudodis', %i[kDO kDO], :expr_beg],
|
92
|
+
['dududu', %i[kDO kDO], :expr_beg],
|
93
|
+
['wala', %i[kNIL kNIL], :expr_end],
|
94
|
+
['hanggang', %i[kUNTIL kUNTIL_MOD], :expr_beg],
|
95
|
+
['hanggang_ang', %i[kUNTIL kUNTIL_MOD], :expr_beg],
|
96
|
+
['mapa_hanggang', %i[kUNTIL kUNTIL_MOD], :expr_beg],
|
97
|
+
['malibang', %i[kUNLESS kUNLESS_MOD], :expr_beg],
|
98
|
+
['maliban_na', %i[kUNLESS kUNLESS_MOD], :expr_beg],
|
99
|
+
['maliban_ang', %i[kUNLESS kUNLESS_MOD], :expr_beg],
|
100
|
+
['o', %i[kOR kOR], :expr_beg],
|
101
|
+
['o_ang', %i[kOR kOR], :expr_beg],
|
102
|
+
['sumunod', %i[kNEXT kNEXT], :expr_mid],
|
103
|
+
['kasunod', %i[kNEXT kNEXT], :expr_mid],
|
104
|
+
['pagka', %i[kWHEN kWHEN], :expr_beg],
|
105
|
+
['pagka_ang', %i[kWHEN kWHEN], :expr_beg],
|
106
|
+
['ay', %i[kWHEN kWHEN], :expr_beg],
|
107
|
+
['ulitin', %i[kREDO kREDO], :expr_end],
|
108
|
+
['at_ulitin', %i[kREDO kREDO], :expr_end],
|
109
|
+
['uliting_muli', %i[kREDO kREDO], :expr_end],
|
110
|
+
['at', %i[kAND kAND], :expr_beg],
|
111
|
+
['at_ang', %i[kAND kAND], :expr_beg],
|
112
|
+
['__LINE__', %i[k__LINE__ k__LINE__], :expr_end],
|
113
|
+
['bilang', %i[kCLASS kCLASS], :expr_class],
|
114
|
+
['klase', %i[kCLASS kCLASS], :expr_class],
|
115
|
+
['__FILE__', %i[k__FILE__ k__FILE__], :expr_end],
|
116
|
+
['END', %i[klEND klEND], :expr_end],
|
117
|
+
['BEGIN', %i[klBEGIN klBEGIN], :expr_end],
|
118
|
+
['waylwaylwayl', %i[kWHILE kWHILE_MOD], :expr_beg],
|
119
|
+
['ako_magisip', %i[kWHILE kWHILE_MOD], :expr_beg],
|
120
|
+
['alyas', %i[kALIAS kALIAS], :expr_fname],
|
121
|
+
['__ENCODING__', %i[k__ENCODING__ k__ENCODING__], :expr_end]
|
122
|
+
].map { |args| KWtable.new(*args) }
|
123
|
+
|
124
|
+
# :startdoc:
|
125
|
+
|
126
|
+
original_verbosity = $VERBOSE
|
127
|
+
$VERBOSE = nil
|
128
|
+
|
129
|
+
WORDLIST18 = Hash[*wordlist.map { |o| [o.name, o] }.flatten]
|
130
|
+
WORDLIST19 = Hash[*wordlist.map { |o| [o.name, o] }.flatten]
|
131
|
+
|
132
|
+
$VERBOSE = original_verbosity
|
133
|
+
|
134
|
+
WORDLIST18.delete '__ENCODING__'
|
135
|
+
|
136
|
+
%w[at at_ang
|
137
|
+
kays hakdog
|
138
|
+
elsip agik_ginagawa_mue
|
139
|
+
para_sa para_ang
|
140
|
+
ip agik
|
141
|
+
sa sa_loob_ng nasa na_nasa
|
142
|
+
modyul grupo
|
143
|
+
o o_ang
|
144
|
+
malibang maliban_na maliban_ang
|
145
|
+
hanggang hanggang_ang mapa_hanggang
|
146
|
+
pagka pagka_ang ay
|
147
|
+
waylwaylwayl ako_magisip].each do |k|
|
148
|
+
WORDLIST19[k] = WORDLIST19[k].dup
|
149
|
+
WORDLIST19[k].state = :expr_value
|
150
|
+
end
|
151
|
+
%w[hindi].each do |k|
|
152
|
+
WORDLIST19[k] = WORDLIST19[k].dup
|
153
|
+
WORDLIST19[k].state = :expr_arg
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
@@ -0,0 +1,286 @@
|
|
1
|
+
require 'io/console'
|
2
|
+
|
3
|
+
grupo Batotris
|
4
|
+
BERSIYON = '0.1'.freeze
|
5
|
+
palawigin magisa
|
6
|
+
|
7
|
+
bilang Piyesa
|
8
|
+
MGA_PIYESA = [
|
9
|
+
[ [0, 1, 0, 0],
|
10
|
+
[1, 1, 1, 0],
|
11
|
+
[0, 0, 0, 0],
|
12
|
+
[0, 0, 0, 0], ],
|
13
|
+
|
14
|
+
[ [0, 1, 1, 0],
|
15
|
+
[1, 1, 0, 0],
|
16
|
+
[0, 0, 0, 0],
|
17
|
+
[0, 0, 0, 0], ],
|
18
|
+
|
19
|
+
[ [1, 1, 0, 0],
|
20
|
+
[0, 1, 1, 0],
|
21
|
+
[0, 0, 0, 0],
|
22
|
+
[0, 0, 0, 0], ],
|
23
|
+
|
24
|
+
[ [1, 1, 1, 1],
|
25
|
+
[0, 0, 0, 0],
|
26
|
+
[0, 0, 0, 0],
|
27
|
+
[0, 0, 0, 0], ],
|
28
|
+
|
29
|
+
[ [1, 1, 0, 0],
|
30
|
+
[1, 1, 0, 0],
|
31
|
+
[0, 0, 0, 0],
|
32
|
+
[0, 0, 0, 0], ],
|
33
|
+
|
34
|
+
[ [1, 0, 0, 0],
|
35
|
+
[1, 1, 1, 0],
|
36
|
+
[0, 0, 0, 0],
|
37
|
+
[0, 0, 0, 0], ],
|
38
|
+
|
39
|
+
[ [0, 0, 1, 0],
|
40
|
+
[1, 1, 1, 0],
|
41
|
+
[0, 0, 0, 0],
|
42
|
+
[0, 0, 0, 0], ],
|
43
|
+
]
|
44
|
+
|
45
|
+
ang initialize(x, y, piyesa = bagong_bloke)
|
46
|
+
@x = x
|
47
|
+
@y = y
|
48
|
+
@piyesa = piyesa
|
49
|
+
finish_na
|
50
|
+
|
51
|
+
ang magiba_ng_posisyon
|
52
|
+
bilang_ng_paglipat = 0
|
53
|
+
ang_posisyon = Array.kumatawan(4)
|
54
|
+
@piyesa.bilang_bawat_isa adbans |bloke, y|
|
55
|
+
bloke.bilang_bawat_isa adbans |b, x|
|
56
|
+
ip b == 1
|
57
|
+
ang_posisyon[bilang_ng_paglipat] = [ @x + x, @y + y ]
|
58
|
+
bilang_ng_paglipat += 1
|
59
|
+
finish_na
|
60
|
+
finish_na
|
61
|
+
finish_na
|
62
|
+
ang_posisyon
|
63
|
+
finish_na
|
64
|
+
|
65
|
+
ang kanan
|
66
|
+
Piyesa.kumatawan(@x + 1, @y, @piyesa)
|
67
|
+
finish_na
|
68
|
+
|
69
|
+
ang kaliwa
|
70
|
+
Piyesa.kumatawan(@x - 1, @y, @piyesa)
|
71
|
+
finish_na
|
72
|
+
|
73
|
+
ang mahulog
|
74
|
+
Piyesa.kumatawan(@x, @y + 1, @piyesa)
|
75
|
+
finish_na
|
76
|
+
|
77
|
+
ang pagikot
|
78
|
+
pansamantala = Array.kumatawan(4){ Array.kumatawan(4, 0)}
|
79
|
+
@piyesa.bilang_bawat_isa adbans |linya, y|
|
80
|
+
linya.bilang_bawat_isa adbans |l, x|
|
81
|
+
pansamantala[x][y] = l
|
82
|
+
finish_na
|
83
|
+
finish_na
|
84
|
+
pansamantala.bilang_bawat_isa adbans |linya, i|
|
85
|
+
pansamantala[i] = linya.baliktad
|
86
|
+
finish_na
|
87
|
+
Piyesa.kumatawan(@x, @y, pansamantala)
|
88
|
+
finish_na
|
89
|
+
|
90
|
+
ang bagong_bloke
|
91
|
+
rnd = rand(MGA_PIYESA.haba)
|
92
|
+
MGA_PIYESA[rnd]
|
93
|
+
finish_na
|
94
|
+
finish_na
|
95
|
+
|
96
|
+
grupo Pananda
|
97
|
+
WALA = 0
|
98
|
+
PADER = 1
|
99
|
+
AKTIBO = 2
|
100
|
+
NAKALINYA = 3
|
101
|
+
finish_na
|
102
|
+
|
103
|
+
bilang Babagsakan
|
104
|
+
LAWAK = 11
|
105
|
+
TAAS = 20
|
106
|
+
DAMI = 40
|
107
|
+
PADER_LETRA = "🀫 "
|
108
|
+
BLOCK_LETRA = "⚀ "
|
109
|
+
WALA_LETRA = " "
|
110
|
+
panguri :dako
|
111
|
+
|
112
|
+
ang initialize
|
113
|
+
@sakop = gagalawan
|
114
|
+
@dako = 0
|
115
|
+
finish_na
|
116
|
+
|
117
|
+
ang burahin
|
118
|
+
@sakop.bilang_bawat_isa adbans |linya, y|
|
119
|
+
linya.bilang_bawat_isa adbans |l, x|
|
120
|
+
@sakop[y][x] = 0 ip l == Pananda::AKTIBO
|
121
|
+
finish_na
|
122
|
+
finish_na
|
123
|
+
finish_na
|
124
|
+
|
125
|
+
ang burahin_ang_linya
|
126
|
+
@sakop.bilang_bawat_isa adbans |linya, y|
|
127
|
+
ip linya == [Pananda::PADER, Pananda::NAKALINYA, Pananda::NAKALINYA, Pananda::NAKALINYA, Pananda::NAKALINYA, Pananda::NAKALINYA, Pananda::NAKALINYA, Pananda::NAKALINYA, Pananda::NAKALINYA, Pananda::NAKALINYA, Pananda::PADER]
|
128
|
+
@dako += 1
|
129
|
+
@sakop.delete_at(y)
|
130
|
+
@sakop.insert(0, [Pananda::PADER, Pananda::WALA, Pananda::WALA, Pananda::WALA, Pananda::WALA, Pananda::WALA, Pananda::WALA, Pananda::WALA, Pananda::WALA, Pananda::WALA, Pananda::PADER])
|
131
|
+
finish_na
|
132
|
+
finish_na
|
133
|
+
finish_na
|
134
|
+
|
135
|
+
ang tapos_na?
|
136
|
+
@dako >= 40
|
137
|
+
finish_na
|
138
|
+
|
139
|
+
ang ay_bloke?(susunod_na_posisyon)
|
140
|
+
resulta = mali
|
141
|
+
susunod_na_posisyon.isaisahin adbans |pos|
|
142
|
+
ip isang_bloke?(pos[0], pos[1])
|
143
|
+
resulta = truts
|
144
|
+
finish_na
|
145
|
+
finish_na
|
146
|
+
resulta
|
147
|
+
finish_na
|
148
|
+
|
149
|
+
ang ipirme(kasulukuyang_posisyon)
|
150
|
+
kasulukuyang_posisyon.isaisahin adbans |pos|
|
151
|
+
@sakop[pos[1]][pos[0]] = Pananda::NAKALINYA
|
152
|
+
finish_na
|
153
|
+
finish_na
|
154
|
+
|
155
|
+
ang bago_ipirme(kasulukuyang_posisyon)
|
156
|
+
kasulukuyang_posisyon.isaisahin adbans |pos|
|
157
|
+
@sakop[pos[1]][pos[0]] = Pananda::AKTIBO
|
158
|
+
finish_na
|
159
|
+
finish_na
|
160
|
+
|
161
|
+
ang write
|
162
|
+
teksto = "\n\e[25D"
|
163
|
+
@sakop.isaisahin adbans |linya|
|
164
|
+
linya.isaisahin adbans |l|
|
165
|
+
ip l == Pananda::WALA
|
166
|
+
teksto += WALA_LETRA
|
167
|
+
agik_ginagawa_mue l == Pananda::AKTIBO || l == Pananda::NAKALINYA
|
168
|
+
teksto += BLOCK_LETRA
|
169
|
+
ginagawa_mue
|
170
|
+
teksto += PADER_LETRA
|
171
|
+
finish_na
|
172
|
+
finish_na
|
173
|
+
teksto += "\n\e[25D"
|
174
|
+
finish_na
|
175
|
+
mag_print teksto
|
176
|
+
finish_na
|
177
|
+
|
178
|
+
private
|
179
|
+
|
180
|
+
ang isang_bloke?(x, y)
|
181
|
+
@sakop[y][x] == Pananda::PADER || @sakop[y][x] == Pananda::NAKALINYA
|
182
|
+
finish_na
|
183
|
+
|
184
|
+
ang gagalawan
|
185
|
+
f = []
|
186
|
+
TAAS.beses adbans |i|
|
187
|
+
linya = []
|
188
|
+
LAWAK.beses adbans |j|
|
189
|
+
linya[j] = (j == 0 || j == LAWAK - 1 || i == TAAS - 1) ? Pananda::PADER : Pananda::WALA
|
190
|
+
finish_na
|
191
|
+
f[i] = linya
|
192
|
+
finish_na
|
193
|
+
ibalik_ang f
|
194
|
+
finish_na
|
195
|
+
finish_na
|
196
|
+
|
197
|
+
ang burahin_ang_screen
|
198
|
+
print "\x1b[2J\x1b[0;0H"
|
199
|
+
finish_na
|
200
|
+
|
201
|
+
ang mahulog_to_bloke(piyesa, sakop)
|
202
|
+
resulta = piyesa
|
203
|
+
loop adbans
|
204
|
+
susunod_na_posisyon = resulta.mahulog.magiba_ng_posisyon
|
205
|
+
ip sakop.ay_bloke?(susunod_na_posisyon)
|
206
|
+
isauli_ang resulta
|
207
|
+
ginagawa_mue
|
208
|
+
resulta = resulta.mahulog
|
209
|
+
finish_na
|
210
|
+
finish_na
|
211
|
+
finish_na
|
212
|
+
|
213
|
+
ang tetris
|
214
|
+
burahin_ang_screen
|
215
|
+
|
216
|
+
sakop = Babagsakan.kumatawan
|
217
|
+
sakop.write
|
218
|
+
|
219
|
+
piyesa = Piyesa.kumatawan(5, 0)
|
220
|
+
|
221
|
+
pinindot = 'n'
|
222
|
+
thread = Thread::start adbans
|
223
|
+
ako_magisip (pinindot = STDIN.getch)
|
224
|
+
ip pinindot == "\C-c"
|
225
|
+
tama_na
|
226
|
+
finish_na
|
227
|
+
finish_na
|
228
|
+
finish_na
|
229
|
+
|
230
|
+
loop adbans
|
231
|
+
matulog(0.2)
|
232
|
+
magisa.burahin_ang_screen
|
233
|
+
mag_print "kaliwa: [left key], kanan: [right key], mahulog: [space], ikutin: [up key], q: exit \e[25D"
|
234
|
+
mag_print "\e[25D#{sakop.dako}\e[25D"
|
235
|
+
|
236
|
+
hakdog pinindot
|
237
|
+
ay 'q' dapat
|
238
|
+
exit
|
239
|
+
ay "D" dapat
|
240
|
+
pansamantala = piyesa.kaliwa
|
241
|
+
ay "C" dapat
|
242
|
+
pansamantala = piyesa.kanan
|
243
|
+
ay 'B' dapat
|
244
|
+
pansamantala = magisa.mahulog_to_bloke(piyesa, sakop)
|
245
|
+
ay ' ' dapat
|
246
|
+
pansamantala = magisa.mahulog_to_bloke(piyesa, sakop)
|
247
|
+
ay "A" dapat
|
248
|
+
pansamantala = piyesa.pagikot
|
249
|
+
ginagawa_mue
|
250
|
+
pansamantala = piyesa.mahulog
|
251
|
+
finish_na
|
252
|
+
|
253
|
+
susunod_na_posisyon = pansamantala.magiba_ng_posisyon
|
254
|
+
|
255
|
+
ip !sakop.ay_bloke?(susunod_na_posisyon)
|
256
|
+
sakop.bago_ipirme(susunod_na_posisyon)
|
257
|
+
piyesa = pansamantala
|
258
|
+
|
259
|
+
agik_ginagawa_mue pinindot != 'n'
|
260
|
+
piyesa = piyesa
|
261
|
+
ginagawa_mue
|
262
|
+
sakop.ipirme(piyesa.magiba_ng_posisyon)
|
263
|
+
piyesa = Piyesa.kumatawan(5, 0)
|
264
|
+
susunod_na_posisyon = piyesa.magiba_ng_posisyon
|
265
|
+
ip sakop.ay_bloke?(susunod_na_posisyon)
|
266
|
+
mag_print "game over"
|
267
|
+
tama_na
|
268
|
+
finish_na
|
269
|
+
finish_na
|
270
|
+
|
271
|
+
sakop.write
|
272
|
+
sakop.burahin
|
273
|
+
sakop.burahin_ang_linya
|
274
|
+
|
275
|
+
pinindot = 'n'
|
276
|
+
ip sakop.tapos_na?
|
277
|
+
mag_print "matagumpay!"
|
278
|
+
tama_na
|
279
|
+
finish_na
|
280
|
+
finish_na
|
281
|
+
Thread.kill(thread)
|
282
|
+
finish_na
|
283
|
+
finish_na
|
284
|
+
|
285
|
+
|
286
|
+
Batotris.tetris
|