filipinomemes 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +4 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +602 -0
  8. data/Rakefile +6 -0
  9. data/_config.yml +1 -0
  10. data/bin/filipinomemes +21 -0
  11. data/filipinomemes.gemspec +26 -0
  12. data/lib/filipinomemes.rb +3 -0
  13. data/lib/filipinomemes/compiler.rb +21 -0
  14. data/lib/filipinomemes/core_ext.rb +8 -0
  15. data/lib/filipinomemes/core_ext/array.rb +19 -0
  16. data/lib/filipinomemes/core_ext/class.rb +4 -0
  17. data/lib/filipinomemes/core_ext/enumerator.rb +3 -0
  18. data/lib/filipinomemes/core_ext/integer.rb +4 -0
  19. data/lib/filipinomemes/core_ext/kernel.rb +13 -0
  20. data/lib/filipinomemes/core_ext/module.rb +4 -0
  21. data/lib/filipinomemes/core_ext/range.rb +6 -0
  22. data/lib/filipinomemes/core_ext/string.rb +13 -0
  23. data/lib/filipinomemes/ruby_parser_patches.rb +156 -0
  24. data/lib/filipinomemes/version.rb +3 -0
  25. data/sample_programs/agapan.bt +5 -0
  26. data/sample_programs/alyas.bt +9 -0
  27. data/sample_programs/batotris.bt +286 -0
  28. data/sample_programs/bilang.bt +10 -0
  29. data/sample_programs/dapat.bt +9 -0
  30. data/sample_programs/habang.bt +7 -0
  31. data/sample_programs/ihinto.bt +8 -0
  32. data/sample_programs/kontrol-sa-pagiikot.bt +45 -0
  33. data/sample_programs/kumusta_mundo.bt +5 -0
  34. data/sample_programs/magbibigay.bt +27 -0
  35. data/sample_programs/maliban_na.bt +12 -0
  36. data/sample_programs/modyul.bt +20 -0
  37. data/sample_programs/nakatukoy.bt +13 -0
  38. data/sample_programs/ngunit_kapag.bt +8 -0
  39. data/sample_programs/o_ang.bt +3 -0
  40. data/sample_programs/pamamaraan-sa-pagkakamali.bt +11 -0
  41. data/sample_programs/pangalan.bt +10 -0
  42. data/sample_programs/panguri.bt +13 -0
  43. data/sample_programs/panuntunan.bt +23 -0
  44. data/sample_programs/para_sa.bt +4 -0
  45. data/sample_programs/pibonasyi.bt +59 -0
  46. data/sample_programs/siguraduhin.bt +8 -0
  47. data/sample_programs/tanggalin.bt +23 -0
  48. data/sample_programs/timebomb.bt +36 -0
  49. data/spec/filipinomemes/compiler_spec.rb +116 -0
  50. data/spec/spec_helper.rb +61 -0
  51. metadata +152 -0
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task default: :spec
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,3 @@
1
+ require 'filipinomemes/version'
2
+
3
+ module Filipinomemes; 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,4 @@
1
+ class Class
2
+ alias gumawa new
3
+ alias kumatawan new
4
+ end
@@ -0,0 +1,3 @@
1
+ class Enumerator
2
+ alias kumuha take
3
+ end
@@ -0,0 +1,4 @@
1
+ class Integer
2
+ alias ulit times
3
+ alias beses times
4
+ 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,4 @@
1
+ class Module
2
+ alias panguri attr_accessor
3
+ alias palawigin extend
4
+ end
@@ -0,0 +1,6 @@
1
+ class Range
2
+ alias isaisahin each
3
+ alias bawat each
4
+ alias sa_bawat_isa each
5
+ alias kada_isa each
6
+ 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,3 @@
1
+ module Filipinomemes
2
+ VERSION = '1.0.0'.freeze
3
+ end
@@ -0,0 +1,5 @@
1
+ wala_na
2
+ 1 / 0
3
+ agapan
4
+ mag_print "Hindi ito posible!"
5
+ finish_na
@@ -0,0 +1,9 @@
1
+ bilang Hayop
2
+ ang aso
3
+ mag_print 'si browny ay mabait!'
4
+ finish_na
5
+ alyas browny aso
6
+ finish_na
7
+
8
+ hayop = Hayop.gumawa
9
+ hayop.browny
@@ -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