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.
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