21
21
< div align ="center " style ="color:rgb(0,255,0);
22
22
font-size: 24px; "> CodeMatrix</ div >
23
23
< canvas id ="matrixCanvas " width ="1280 " height ="720 "> </ canvas >
24
- < script >
25
- const LETTER_MAX = 21 ;
26
- const LETTER_NUM = 40 ;
27
- const LETTER_SIZE = 32 ;
28
- const TIMEOUT = 1 ;
29
- const COLOR = "rgb(0, 255, 0)" ;
30
- const FONT = "32px Arial" ;
24
+ < script src ="matrix.js "> </ script >
31
25
32
- class Letter {
33
- constructor ( ch , xpos , ypos ) {
34
- this . ch = ch ;
35
- this . xpos = xpos ;
36
- this . ypos = ypos ;
37
- }
38
- }
39
-
40
- class LetterGen {
41
- constructor ( ) {
42
- this . letters = [ ] ;
43
- this . letterRow = [ ] ;
44
- let x = 0 ;
45
- for ( let i = 0 ; i < LETTER_NUM ; i ++ ) {
46
- let column = [ ] ;
47
- let y = - LETTER_SIZE ;
48
- for ( let j = 0 ; j < LETTER_MAX ; j ++ ) {
49
- column . push ( new Letter ( this . getRandomChar ( ) , x , y ) ) ;
50
- y += LETTER_SIZE + 4 ;
51
- }
52
- this . letters . push ( column ) ;
53
- this . letterRow . push ( Math . floor ( Math . random ( ) * ( 32 - 24 + 1 ) + 24 ) ) ;
54
- x += LETTER_SIZE ;
55
- }
56
- }
57
-
58
- getRandomChar ( ) {
59
- const chars = 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん' ;
60
- return chars . charAt ( Math . floor ( Math . random ( ) * chars . length ) ) ;
61
- }
62
- }
63
-
64
- const canvas = document . getElementById ( 'matrixCanvas' ) ;
65
- const ctx = canvas . getContext ( '2d' ) ;
66
-
67
- ctx . font = FONT ;
68
- ctx . fillStyle = COLOR ;
69
-
70
- const letterGen = new LetterGen ( ) ;
71
- let tickCount = 0 ;
72
- let dir = false ;
73
-
74
- document . addEventListener ( 'keydown' , ( event ) => {
75
- if ( event . key === 'Escape' ) {
76
- cancelAnimationFrame ( animationFrameId ) ;
77
- } else if ( event . key === 'ArrowUp' ) {
78
- dir = true ;
79
- } else if ( event . key === 'ArrowDown' ) {
80
- dir = false ;
81
- }
82
- } ) ;
83
-
84
- function draw ( ) {
85
- ctx . clearRect ( 0 , 0 , canvas . width , canvas . height ) ;
86
- for ( let i = 0 ; i < letterGen . letters . length ; i ++ ) {
87
- for ( let letter of letterGen . letters [ i ] ) {
88
- ctx . fillText ( letter . ch , letter . xpos , letter . ypos ) ;
89
- const speed = letterGen . letterRow [ i ] ;
90
- if ( tickCount > TIMEOUT ) {
91
- if ( dir ) {
92
- letter . ypos -= speed ;
93
- if ( letter . ypos <= - LETTER_SIZE ) {
94
- letter . ypos = canvas . height ;
95
- letter . ch = letterGen . getRandomChar ( ) ;
96
- }
97
- } else {
98
- letter . ypos += speed ;
99
- if ( letter . ypos >= canvas . height ) {
100
- letter . ypos = - LETTER_SIZE ;
101
- letter . ch = letterGen . getRandomChar ( ) ;
102
- }
103
- }
104
- }
105
- }
106
- }
107
-
108
- if ( tickCount > TIMEOUT ) {
109
- tickCount = 0 ;
110
- }
111
- tickCount ++ ;
112
-
113
- animationFrameId = requestAnimationFrame ( draw ) ;
114
- }
115
-
116
- let animationFrameId = requestAnimationFrame ( draw ) ;
117
- </ script >
118
26
</ body >
119
- </ html >
27
+ </ html >
0 commit comments