
シューティングゲーム(ブログ内でリンクを貼ってます。プレイできます。)のソース↓↓
開発は奥が深いし、実際、どんな書き方をしても動くプログラムは作れる。
でも、文法の王道ってあるみたいで。
↑↑この本に書いてあることなんか、その典型。
カプセル化とか、
処理時間の短縮のためにループの多重化をしないとか、
同一処理をメソッド化するとか、
挙げたらきりが無いんだけど、javaに限らず、プログラミングにはその王道的な書き方があるみたいだ。
そこらへんを知らなかったころは、本当、力づくで同じ処理をコピペしてあちらこちらで書いて、何千行ものコードのゲームを作って、それでも動いたんだから凄い。
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
//キャラクタクラス
abstract class Chr {
protected static Game1229 app;//アプレット
protected Image img;//画像
protected int x, y;//座標
protected int w, h;//幅・高さ
private boolean dead;//死亡フラグ
//コンストラクタ
//引数 img:キャラクタ画像のImageオブジェクト
protected Chr(Image img) {
//画像設定
this.img = img;
//画像の幅 高さを習得
w = img.getWidth(app);
h = img.getHeight(app);
//死亡フラグクリア
dead = false;
}
//死亡チェック
boolean isDead() {return dead;}
//死亡する
void dead() {dead = true;}
//移動
abstract void move();
//当たり判定
//引数 t:判定キャラクター
//戻り値 当たり:true 外れ:false
boolean checkHit(Chr t) {
if (x > t.x - w && x < t.x + t.w && y > t.y - h && y < t.y + t.h) {
return true;
}
return false;
}
//描画
void draw(Graphics g) {
g.drawImage(img, x, y, app);
}
}
class Jiki extends Chr {
private int tamaIntCount;//弾と弾の発射間隔
private int power;//パワー
private int muteki;//無敵時間
//弾の速度配列
private static int tv[][] = {
{0, -8},
{-1, -1, 1, -1},
{-7, -7, 0, -8, 7, -7},
{-7, -7, 0, -8, 7, -7, -7, 7, 7, 7},
};
//コンストラクタ
Jiki() {
super(app.imgJiki);
//発射間隔をクリア
tamaIntCount = 0;
//パワー初期化
power = 0;
muteki = 0;
//初期座標を設定する
x = (app.getw() - w) / 2;
y = app.geth() - h - 16;
}
//移動
void move() {
//左移動
if (Key.left) {
x -= 4;
if (x < 0) x = 0;
}
//右移動
if (Key.right) {
x += 4;
if (x > app.getw() - w) x = app.getw() - w;
}
//上移動
if (Key.up) {
y -= 4;
if (y < 0) y = 0;
}
//下移動
if (Key.down) {
y += 4;
if (y > app.geth() - h) y = app.geth() - h;
}
//弾発射
if (tamaIntCount > 0) tamaIntCount--;
if (Key.space) {
if (tamaIntCount <= 0) {
for (int i = 0; i < tv[power].length; i += 2){
app.addList(new Tama(x + w / 2, y, tv[power][i], tv[power][i + 1]));
}
app.sndShot.play();
tamaIntCount = 7;
}
}
//無敵中なら無敵時間を減らす
if (muteki > 0) muteki--;
}
//当たり判定
//敵とアイテムに当たり判定を行う
boolean checkHit(Chr t) {
if (t instanceof Teki && muteki == 0){
if (super.checkHit(t)) {
//敵と当たったら爆発、死亡、ゲームオーバー画面に移る
power--;
app.sndBang.play();
t.dead();
muteki = 100;
if (power < 0) {
dead();
app.goOver();
}
return true;
}
}else if (t instanceof Item) {
if (super.checkHit(t)) {
//アイテムに当たったらパワーアップ
upPower();
t.dead();
return true;
}
}
return false;
}
//パワーアップ
void upPower() {
if (power >= tv.length - 1) {
//最大パワーまで達していたらボーナス追加
app.addScore(1000);
}else{
power++;
}
}
}
//アイテムクラス
class Item extends Chr {
//コンストラクタ
Item() {
super(app.imgItem);
//初期座標を設定する
//初期座標を設定する
x = (int)(Math.random() * (app.getw() - w));
y = -h;
}
//移動
void move() {
y += 4;
if (y > app.geth()) dead();
}
//当たり判定
//誰とも行わない
boolean checkHit(Chr t) {return false;}
}
//敵基本クラス
class Teki extends Chr {
//コンストラクタ
Teki(Image img) {
super(img);
}
//移動
void move() {
//画面外に出たら死亡
if (x < -w) dead();
else if (x > app.getw()) dead();
else if (y > app.geth()) dead();
}
//当たり判定
//弾にのみ当たり判定を行う
boolean checkHit(Chr t) {
if (t instanceof Tama) {
if (super.checkHit(t)) {
//弾と当たったら爆発、スコア追加、自分の弾死亡
app.sndBang.play();
app.addScore(100);
dead();
t.dead();
return true;
}
}
return false;
}
}
//ザコAクラスまっすぐ突っ込んでくる
class ZakoA extends Teki {
//コンストラクタ
ZakoA () {
super(app.imgZakoA);
//初期座標を設定する
x = (int)(Math.random() * (app.getw() - w));
y = -h;
}
//移動
void move() {
y += 8;
super.move();
}
}
//ザコBクラスななめに反射しながら動く
class ZakoB extends Teki {
private int vx;//横方向の速度
//コンストラクタ
ZakoB() {
super(app.imgZakoB);
//初期座標を設定する
x = (int)(Math.random() * (app.getw() - w));
y = -h;
//画面左から登場したら右、画面右から登場したら左に動く
if (x < (app.getw() - w) / 2) vx = 8;
else vx = -8;
}
//移動
void move() {
y += 4;
x += vx;
if (x < 0) vx = 8;
else if (x > app.getw() - w) vx = -8;
super.move();
}
}
//ザコCクラス自機を追尾する
class ZakoC extends Teki {
private double vx, vy;//速度
private double tv;//追尾速度
//コンストラクタ
ZakoC() {
super(app.imgZakoC);
//初期座標を設定する
x = (int)(Math.random() * (app.getw() - w));
y = -h;
vx = vy = 0;
tv = 0.2;
}
// 移動
void move() {
if (app.getJikix() > x) {
vx += tv;
if (vx > 8) vx = 8;
} else if (app.getJikix() < x) {
vx -= tv;
if (vx < -8) vx = -8;
}
if (app.getJikiy() > y) {
vy += tv;
if (vy > 8) vy = 8;
} else if (app.getJikiy() < y) {
vy -= tv;
if (vy < -8) vy = -8;
}
x += (int)vx;
y += (int)vy;
}
}
//ボスクラス
class Boss extends Teki {
private int vx, vy;//速度
private int power;//耐久力
//コンストラクタ
Boss() {
super(app.imgBoss);
//初期座標を設定する
x = (int)(Math.random() * (app.getw() - w));
y = -h;
//画面左から登場したら右、画面右から登場したら左に動く
if (x < (app.getw() - w) / 2) vx = 8;
else vx = -4;
vy = 4;
power = 30;
}
//移動
void move() {
x += vx;
y += vy;
if (x < 0) vx = 4;
else if (x > app.getw() - w) vx = -4;
if (y < 0) vy = 4;
else if (y > app.geth() - h) vy = -4;
super.move();
}
//死亡
void dead() {
power--;
if (power < 0) super.dead();
}
}
//弾クラス
class Tama extends Chr {
private int vx, vy;//速度
//コンストラクタ
//引数 xy座標(弾の中心を指定)vxvy速度
Tama(int x, int y, int vx, int vy) {
super(app.imgTama);
this.x = x - w / 2;
this.y = y - h /2;
this.vx = vx;
this.vy = vy;
}
//移動
void move() {
x += vx; y += vy;
//画面外に出たら死亡
if (x < -w || x > app.getw() || y < -h || y > app.geth()) dead();
}
//当たり判定
//誰とも行わない
boolean checkHit(Chr t) {return false;}
}
//キー入力クラス
class Key extends KeyAdapter {
static boolean left, right, up, down, space, enter;
//キーが押されたときの処理
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_LEFT: left = true; break;
case KeyEvent.VK_RIGHT: right = true; break;
case KeyEvent.VK_UP: up = true; break;
case KeyEvent.VK_DOWN: down = true; break;
case KeyEvent.VK_SPACE: space = true; break;
case KeyEvent.VK_ENTER: enter = true; break;
}
}
//キーが離されたときの処理
public void keyReleased(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_LEFT: left = false; break;
case KeyEvent.VK_RIGHT: right = false; break;
case KeyEvent.VK_UP: up = false; break;
case KeyEvent.VK_DOWN: down = false; break;
case KeyEvent.VK_SPACE: space = false; break;
case KeyEvent.VK_ENTER: enter = false; break;
}
}
}
//メイン
public class Game1229 extends Applet implements Runnable {
private Vector clist, clistTmp;//キャラクタリスト・仮キャラ
private volatile Thread gameThread;//ゲームスレッド
private Image offImage;//仮想画面
private Graphics gv;//仮想画面グラフィックオブジェクト
private final int SCENE_INIT = 0;//シーン初期化
private final int SCENE_TITLE = 1;//シーンタイトル
private final int SCENE_MAIN = 2;//シーンメイン
private final int SCENE_OVER = 3;//シーンゲームオーバー
private int scene;//シーン
private int score;//得点
private Font scoreFont;//得点用フォント
private int width, height;//アプレットの幅高さ
private MediaTracker mt;//画像読み込み用メディアトラッカー
private int tekiInterval;//敵出現間隔
private int tekiIntCount;//敵出現間隔カウンター
private int itemIntCount;//アイテム出現カウンター
private Jiki jiki;//自機オブジェクト
Image imgJiki, imgItem, imgTama;//
Image imgZakoA, imgZakoB, imgZakoC;//
Image imgBoss;//
AudioClip sndShot, sndBang;//音声
//初期化
public void init() {
width = getSize().width;
height = getSize().height;
scene = SCENE_INIT;
//得点用フォント生成
scoreFont = new Font("Arial", Font.BOLD, 12);
//背景色を黒色に設定
setBackground(Color.blue);
//前景色を白色に設定
setForeground(Color.white);
//仮想画面の生成
offImage = createImage(width, height);
gv = offImage.getGraphics();
//キー受付オブジェクト生成
addKeyListener(new Key());
//Chrクラスにアプレットを渡す
Chr.app = this;
//メディアトラッカー生成
mt = new MediaTracker(this);
//キャラクタリスト・仮キャラクタリスト生成
clist = new Vector();
clistTmp = new Vector();
//画像読み込み・メディアトラッカーに登録
imgJiki = getImage(getDocumentBase(), "jiki.gif" );
mt.addImage(imgJiki, 0);
imgItem = getImage(getDocumentBase(), "item.gif" );
mt.addImage(imgItem, 0);
imgZakoA = getImage(getDocumentBase(), "zakoa.gif"); // ザコA
mt.addImage(imgZakoA, 0);
imgZakoB = getImage(getDocumentBase(), "zakob.gif"); // ザコB
mt.addImage(imgZakoB, 0);
imgZakoC = getImage(getDocumentBase(), "zakoc.gif"); // ザコC
mt.addImage(imgZakoC, 0);
imgBoss = getImage(getDocumentBase(), "boss.gif"); // ボス
mt.addImage(imgBoss, 0);
imgTama = getImage(getDocumentBase(), "tama.gif"); // 弾
mt.addImage(imgTama, 0);
//サウンドの読み込み
//8000Hz,mono,8bit,μ-lawのSUN形式(.AU)
sndShot = getAudioClip(getDocumentBase(), "shot.au");
sndBang = getAudioClip(getDocumentBase(), "bang.au");
requestFocus();
}
//ゲームスレッドの開始
public void start() {
if(gameThread == null) {
gameThread = new Thread(this);
gameThread.start();
}
}
//ゲームスレッドの停止
public void stop() {
gameThread = null;
}
//ゲームスレッドのメイン
public void run() {
while(gameThread == Thread.currentThread()) {
//裏画面の消去
gv.clearRect(0, 0, width, height);
//各シーン処理
switch(scene){
case SCENE_INIT: gameInit(); break;
case SCENE_TITLE: gameTitle(); break;
case SCENE_MAIN: gameMain(); break;
case SCENE_OVER: gameOver(); break;
}
//再描画
repaint();
//20ミリ秒待つ
try{
Thread.sleep(20);
}catch (InterruptedException e) {
break;
}
}
}
//ゲーム初期化処理
private void gameInit(){
//画面描画
drawCenter("Loading...", 180);
//画像が完全に読み込まれるまで待つ
if (mt.statusAll(true) == MediaTracker.COMPLETE) {
//準備処理
ready();
//タイトル画面へ移行
scene = SCENE_TITLE;
}
}
//準備処理・・・ゲームが開始するたびに呼ばれる
private void ready(){
//得点クリア
score = 0;
//出現間隔を初期値に
tekiInterval = 50;
tekiIntCount = 0;
//キャラクタリストクリア
clist.setSize(0);
//テンポラリキャラクタリストクリア
clistTmp.setSize(0);
//自機オブジェクト追加
jiki = new Jiki();
addList(jiki);
}
//ゲームタイトル処理
private void gameTitle(){
//エンターキーが押されると
if(Key.enter){
//ガーベジコレクション依頼
System.gc();
//ゲームメインへ移行
scene = SCENE_MAIN;
}
//タイトル画面描画
gv.setFont(new Font("Arial", Font.BOLD, 28));
drawCenter("ARIGATA-MEIWAKU", 180);
gv.setFont(new Font("Arial", Font.PLAIN, 20));
drawCenter("Press the ENTER key", 350);
}
//ゲームメイン処理
private void gameMain(){
int i, j;
Chr c, c2;
//移動
for(i = 0; i < clist.size(); i++) {
c = (Chr)(clist.elementAt(i));
c.move();
}
//描画
for(i = 0; i < clist.size(); i++) {
c = (Chr)(clist.elementAt(i));
c.draw(gv);
}
//当たり判定
for (i = 0; i < clist.size(); i++) {
c = (Chr)(clist.elementAt(i));
for(j = 0; j < clist.size(); j++) {
c2 = (Chr)(clist.elementAt(j));
c.checkHit(c2);
}
}
//死亡チェック
i = 0;
while(i < clist.size()){
c = (Chr)(clist.elementAt(i));
//死亡していたらリストから削除
if (c.isDead()) clist.removeElementAt(i);
else i++;
}
//敵出現
tekiIntCount--;
if(tekiIntCount <= 0){
int kind = (int)(Math.random() * 3);
if(kind == 0) addList(new ZakoA());
if(kind == 1) addList(new ZakoB());
if(kind == 2) addList(new ZakoC());
if((int)(Math.random() * 50) == 0) addList(new Boss());
tekiInterval--;
if(tekiInterval < 1)tekiInterval = 20;
tekiIntCount = tekiInterval;
}
//アイテム出現
itemIntCount++;
if(itemIntCount > 300) {
addList(new Item());
itemIntCount = 0;
}
//キャラクタリストにテンポラリキャラクタを追加
for(i = 0; i < clistTmp.size(); i++){
clist.addElement(clistTmp.elementAt(i));
}
clistTmp.setSize(0);
gv.setFont(scoreFont);
gv.drawString("SCORE : " + String.valueOf(score), 10, 20);
}
//ゲームオーバー処理
private void gameOver(){
//エンターキーが押されたら
if(Key.enter){
//ゲーム準備処理
ready();
//タイトル画面へ移行
scene = SCENE_TITLE;
}
//ゲームオーバー画面描画
gv.setFont(new Font("Arial", Font.BOLD, 28));
drawCenter("GAMEOVER", 180);
gv.setFont(new Font("Arial", Font.PLAIN, 20));
drawCenter("SCORE : " + String.valueOf(score), 350 );
}
//アプレットの幅高さを得る
int getw(){return width;}
int geth(){return height;}
//自機の座標を取得
int getJikix(){return jiki.x;}
int getJikiy(){return jiki.y;}
//文字列を中央ぞろえで表示
//引数str文字列y:y座標
private void drawCenter(String str, int y){
FontMetrics fm = getFontMetrics(gv.getFont());
gv.drawString(str, (width - fm.stringWidth(str)) / 2, y);
}
//テンポラリキャラクタリストにキャラクタを追加する
void addList(Chr c){clistTmp.addElement(c);}
//ゲームオーバーに移行
void goOver(){scene = SCENE_OVER;}
//スコア追加
void addScore(int s){score += s;}
//描画
public void paint(Graphics g){
//裏画面から表画面へ転送
g.drawImage(offImage, 0, 0, this);
}
//更新
public void update(Graphics g){
paint(g);
}
}
・・・・・・・・・・・・・・
・・・・・・・・・・・・・・
昨日はノヴァで中国語でした。
これで今月の中国語は終わり。
結局、レベル2のままだった。
一緒にレッスンした2人は、一人は私と同レベルぐらい。
恐らく、中検3級レベル。
もう一人は全然ダメなレベル。多分準4級レベルでしょう。
「酱汤(みそ汁)が飲みたい」と言いたいところを、「糖浆(シロップ)が飲みたい」と言ってしまい、周囲から失笑される始末。
リスニングも全然ダメ。
レベル2の参加者のレベルの幅が大きすぎる。
早くレベル3に上げるか、レベル2の基準を厳しくして欲しい。
・・・・・・・・・・・・・
取り合えず、中国語日記
近日越来越暖了。
今天,我冬天穿用的派克的时候出汗注意到了。
今天,我买了一件随身听。这是旧式的。
在一个电机店,我找到了只一个旧式随身听。
我说了这样,我认为你们停止生产旧式随身听所以,现在下载软件从因特网。
这是现在的主流。
人们通过IPOD听音乐。
我买了一本书。
是英语检定学习用的文本。
在图书馆,我坐着2个小时,我腻烦开始走。
辞去英语学习返回了家。
现在我困恼。
怎样控制年幼动转的孩子。
我认为他有一种障碍。
//////////
你思念语言学会的最有效的方法是什么?
听很多?
说很多?
接受语言学的考试?
交外国人的朋友?
其他呢?
黄金周,我打算去英语咖啡店。
在那里英语会的外国人。
我们费对咖啡,坐着椅子,我会话尽请说。
我想提高我自己的英语水平。
/////////
我想成为一个三个语言运用的高手。
/////////
去年的孩子们镇定下来了。
总是与去年的孩子们比较。
不过,我自己的能力提高了。
对学生们,我能显示更好的自己。
监护人的期待高。
今年期待着与监护人好的关系能构筑。
/////////
马来西亚的飞机坠落之后一个月。
到底发生着什么。
还一个零部件也没找到。
/////////
五年前的中文没有了不起的事。
・・・・・・・・・・・・・
・・・・・・・・・・・・・
저는 초등학교에서 3학년을 가르치고 있습니다.
어린이들은 귀엽습니다.
어린이들은 시끄럽습니다.
여기 저기 움직이는 어린이가 있어서 곤란을 겪고 있습니다.
・・・・・・・・・・・・・
・・・・・・・・・・・・・
昨日、この本を買ったよ。↑↑
英検1級のリスニングはトーイックの900点レベルのより難しいかも。
でも、その分、練習になるから、却って、トーイックの問題集をやるよりためになるかも。
・・・・・・・・・・・・・
・・・・・・・・・・・・・
감기에 걸렸습니다.
カムギエ コルリョッスムニダ
風邪をひきました
기침이 나옵니다.
キチミ ナオムニダ
咳が出てきます
담이 나옵니다.
タミ ナオムニダ
痰が出てきます
몸이 나른합니다.
モミ ナルナムニダ
体がだるいです
열이 납니다.
ヨリ ナムニダ
熱が出ます
・・・・・・・・・・・・・
가짜 베토벤 문제
カッチャ ベトベン ムンジェ
以下引用
(도쿄=연합뉴스) 조준형 특파원 = 일본 공영방송 NHK가 다른 사람의 곡을 자신의 것으로 속여 발표한 '가짜 일본판 베토벤'에 속아 넘어간 데 대해 시청자들에 공식 사과했다.
NHK는 대리 작곡 사실이 최근 들통 난 사무라고치 마모루(佐村河內守·50)씨를 제대로 검증하지 못한 채 작년 3월 그에 대한 특집 프로그램을 방송한 데 대해 "필요하다고 생각된 검토와 확인은 했지만 결과적으로 사실과 다른 내용을 방영한 것을 진지하게 받아들여 반성하지 않으면 안 된다"는 조사 보고서 내용을 16일 방영했다.
NHK는 사무라고치씨가 카메라 앞에서 곡의 전체 구성을 써내려가는 것을 보면서 본인이 직접 작곡한 것으로 잘못 인식했다고 부연했다.
NHK는 "취재 범위를 넓혀 입증을 위한 취재를 했더라면 그의 경력이 허위였음을 간파할 수 있었을지 모른다"며 "연수회 등에서 이 문제를 제기해 재발을 방지하도록 노력하겠다"고 밝혔다.
사무라고치 씨는 청각 장애인이면서도 공전의 CD 판매량을 기록한 교향곡 등을 작곡한 것으로 알려지면서 '현대의 베토벤' '일본의 베토벤' 등으로 불렸지만 최근 그의 작품들이 오래전부터 '유령 작곡가'가 대작해온 것이라는 사실이 드러나 엄청난 파문을 불러일으켰다.
引用元:http://www.yonhapnews.co.kr/international/2014/03/17/0602000000AKR20140317105100073.HTML
(도쿄 トッキョ 東京=연합뉴스 ヨンハプニュス 連合ニュース)
조준형 チョジュンヒョン (人名)
특파원 トゥクパウォン 特派員
일본 イルボン 日本
공영방송 コンヨンパンソン 公営放送
NHK가 ガ が
다른 タルン 他の
사람의 サラミ 人の
곡을 コクル 曲を
자신의 チャシニ 自身の
것으로 コスロ ことで
속여 ソキョ だまして
발표한 パルピョハン 発表した
가짜 カッチャ 偽
일본판 イルボンパン 日本版
베토벤 ベトベン ベートーベン
에 エ に
속아 ソッカ だまされて
넘어간 ノモガン しまったこと
데 デ に
대해 テヘ 対して
시청자들에 シチョンジャドゥレ 視聴者たちに
공식 コンシク 公式
사과했다. サゴァヘッタ 謝った
NHK는 ヌン は
대리 デリ 代理
작곡 チャクコク 作曲
사실이 サシリ 事実が
최근 チョイグン 最近
들통난 トゥルトンナン ばれた
사무라고치 サムラゴチ 佐村河内
마모루 マモル 守
씨를 ッシルル さんを
제대로 ジェデロ まともに
검증하지 コムジュンハジ 検証でき
못한 モッタン ない
채 チェ まま
작년 チャクニョン 昨年
3월 サーウォル 3月
그에 クエ それに
대한 テハン 対する
특집 トゥクジプ 特集
프로그램을 プログレムル プログラムを
방송한 パンソンハン 放送したこと
데 デ に
대해 テヘ 対して
필요하다고 ピリョハダゴ 必要だと
생각된 センガクドゥイン 考えられた
검토와 コムトワ 検討と
확인은 ホァギヌル 確認は
했지만 ヘッジマン したが
결과적으로 キョルゴァジョグロ 結果的に
사실과 サシルゴァ 事実と
다른 タルン 違った
내용을 ネヨンウル 内容を
방영한 パンヨンハン 放送した
것을 ゴスル のを
진지하게 チンジハゲ 真剣に
받아들여 パダドゥリェ 受け入れて
반성하지 パンソンハジ 反省し
않으면 アヌミョン なくては
안 된다 アンドィッタ いけない
는 ヌン という
조사 チョサ 調査
보고서 ポゴソ 報告書
내용을 ネヨンウル 内容を
16일 シムニュギル 16日
방영했다. パンヨンヘッタ 放映した
NHK는 ヌン は
사무라고치씨가 サムラゴチッシガ 佐村河内氏が
카메라 カメラ
앞에서 アペソ 前で
곡의 コグィ 曲の
전체 チョンジェ 全体
구성을 クソンウル 構成を
써내려가는 ソネリョガヌン 書いていく
것을 ゴスル のを
보면서 ポミョンソ 見て
본인이 ポニニ 本人が
직접 チクジョプ 直接
작곡한 チャクコクハン 作曲
것으로 ゴスロ したと
잘못 チャルモッ 間違って
인식했다고 インシクヘッタゴ 認識したと
부연했다. プヨンヘッタ 説明した
NHK는 ヌン は
취재 チュイジェ 取材
범위를 ポムィルル 範囲を
넓혀 ノルミョ 広げて
입증을 イムジュンウル 立証の
위한 ウィハン ための
취재를 チュイジェルル 取材を
했더라면 ヘットラミョン したならば
그의 クィ 彼の
경력이 キョンニョギ 経歴が
허위였음을 ホウィヨスムル 虚偽だったことを
간파할 カンパハル 看破する
수 ス こと
있었을지 イッソスルジ できた
모른다 モルンダ かもしれない
며 ミョ として
연수회 ヨンスフィ 研修会
등에서 トゥンエソ などで
이 イ この
문제를 ムンジェルル 問題を
제기해 ジェギヘ 提起して
재발을 チェパルル 再発を
방지하도록 パンジハドロク 防止するように
노력하겠다 ノリョクハゲッタ 努力する
고 コ と
밝혔다. パルゲォッタ 明らかにした
사무라고치 씨는 サムラゴチッシヌン 佐村河内氏は
청각 チョンガク 聴覚
장애인이면서도 チャンエイニミョンソド 障害者ながらも
공전의 コンジョニ 空前の
판매량을 パンメニャンウル 販売量を
기록한 キロクハン 記録した
교향곡 キョハンゴク 交響曲
등을 ドゥンウル などを
작곡한 チャクゴクハン 作曲
것으로 ゴスロ したと
알려지면서 アルリョジミョンソ 分かって
현대의 ヒョンディ 現代の
베토벤 ベトベン ベートーベン
일본의 イルボニ 日本の
베토벤 ベトベン ベートーベン
등으로 トゥンウロ などと
불렸지만 プルリョッジマン 呼ばれたが
최근 チュイグン 最近
그의 クィ 彼の
작품들이 チャクプムドゥリ 作品が
오래전부터 オレジョンプト かなり以前から
유령 ユリョン 幽霊
작곡가 チャクゴクガ 作曲家
가 ガ が
대작해온 デジョグヘオン 代作してきた
것이라는 ゴシラン という
사실이 サシリ 事実が
드러나 ドゥロナ あらわれて
엄청난 オムチョンナン 途方も無い
파문을 パムンウル 波紋を
불러일으켰다. プルロイルキョッタ 呼び起こした
・・・・・・・・・・・・・
・・・・・・・・・・・・・
・・・・・・・・・・・・・
・・・・・・・・・・・・・
昨日の自分が今日の自分より愚かだと思えているということは成長している証なんだろう。
大学受験の頃、意味も分からず英語のテキストをノートに丸写しして勉強していた気分になっていた。
昨日、図書館で高校生がその頃の自分と全く同じことをやっていたので、ふと思い出した。
確かに、テキスト丸写しは手が疲れるし勉強した気分になるけど、、、
勉強したことにはならないよね。
・・・・・・・・・・・・・
これからも、しばらく、「自分」と「よそ様の子ども」を成長させる日々が続くんだろう。
自分の「家族」や「子ども」ではなく。
・・・・・・・・
自分が選んだ道だから。
自分が選んだ。。。
・・・・・・・・
高校の頃、上手くいかなくって、、、
上手くいかなくって、、、
へタレで。
それを長引かせて、
チャンスはあったのに。
・・・・・・・・
・・・・・・・・・・・・・・
・・・・・・・・・・・・・・
・・・・・・・・・・・・・・
・・・・・・・・・・・・・・
さて、千尋の谷に突き落とされたぞ。
まあ、そういう苦境にはなれているが。
基本を一から叩き込んで頭を働かせるしかない。
がんばるのは、今度は自分。
・・・・・・・・
日
苦難に向き合う
英
Distress is faced.
韓
고난에 마주 향한다
コナネ マジュ ヒャンハンダ
中
为苦难相对
WEI2 KU3 NAN2 XIANG1 DUI4