

今日のemuの講師はこのテキストを持っていた。
中級漢語口語 提高編。
エンギョウゲイさんだ。
次回も、この講師が空いていれば、この講師に中国語を習おう。
・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・
自分が幸せでないのは、恋愛についてガツガツいってないから。
仕事では、ガツガツいっているから、現在は仕事にありつけているし、満足は一応している。
手に入れたくなったらガツガツ行かないと。
やはり、ちょっと引いてしまっているところがあるんだ。
恋愛での失敗や挫折が多く、
恋愛の甘いジュースを楽しんだ期間なんて、20歳の正月の初詣の川崎大師でのひと時ぐらいだった。
もし、あそこでがっつり行っていれば。
自分の人生も大きく変わっていたかもしれない。
今、もう一度再チャレンジしようと思っている。
恋愛に。
ダメもとで。
いや、決まった相手すらまだいないんだけど、
それを探す活動から始めようかと思っている。
・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・
今日の禁酒の友はこれ、グレッグ・イーガンのディアスポラ
・・・・・・・・・・・・・・・・・・・・・・・・・
備忘録
シューティングゲームのソースimport java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Insets;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Timer;
import java.util.TimerTask;
import javax.sound.midi.InvalidMidiDataException;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.MidiUnavailableException;
import javax.sound.midi.Sequence;
import javax.sound.midi.Sequencer;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
import javax.swing.JApplet;
import javax.swing.JFrame;
public abstract class GameHoneGumiApplet extends JApplet implements Runnable {
public static final int GAMEN_W = 624;
public static final int GAMEN_H = 480;
public static final int GS_STARTGAMEN = 0;
public static final int GS_STAGESTART = 1;
public static final int GS_STAGECLEAR = 2;
public static final int GS_WARP = 6;
public static final int GS_GAMEOVER = 3;
public static final int GS_GAMEMAIN = 4;
public static final int GS_SHOP = 5;
public static final int GM_ZAKO = 0;
public static final int GM_SHOP = 3;
public static final int GM_BOSS = 1;
public static final int GM_BOSS_EFFECT = 2;
protected int gamestate;
protected int gamemainstate;
//public JFrame frame1;
//public BufferStrategy bstrategy;
public Sequencer midiseq = null;
public Sequencer midiseq2 = null;
private int waittimer;
protected int score, highscore;
BufferedImage charaimage, warpImage, tikeiimage, startimage, biBoss, biJiki, biItem,backimage1,bitimage,biBoss2,biBoss3,biBoss4,biBoss5,backgasimage,backimage2,backimage3,backimage4,kowareimage,barrierimage;//背景用にバックイメージ、ビットを追加
BufferedImage shopimage, mineImage, tameImage, shot1Image, shot2Image, missleImage; // 店の外用
BufferedImage mineShopImage, chargeImage, shopmissle;// 店の中用
Jiki jiki;
Mine mine;
Missle missle;
Bit bit;//
Boss boss;
Barrier barrier;
Boss2 boss2;//使ってない
boolean upkey, downkey, rightkey, leftkey, spacekey;
boolean keyz, keyx, keyc;
ArrayList jikitamas, jikitametamas, jikitametamaminis, tekis, tekitamas, bakuhatsus, items, kowares, initshopitems, shopitems, boughtitems;
int rensya=0;
int tekitamarate = 100;
int stagenum=1;
Clip seClip1,seClip2,seClip3,seClip4;
// 背景画像用
int iBackgroundX = 0;//背景移動用追加
int iBackgroundX2 = 0;
TikeiMap tikeimap;
Koware koware;//追加
int iBossTairyoku = 2;//100;
int barrierup = 10;
boolean barrierflag = false;
// チャージショットの溜めカウント
int iChargeCount = 0;
int iBossEffectCount;
// 取得したアイテム数
protected int iGotItemNum = 0;
// 取得したお金
protected int iGotMoneyNum = 0;
// デバッグ制御変数
// 一時的にボスモードにしたい場合はこの変数をtrueにする
protected boolean isBossDebug = false;
public void init(int w,int h, String title){
//frame1 = new JFrame(title);
//frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBackground(Color.WHITE);
//setResizable(false);
setVisible(true);
Insets insets = getInsets();
setSize(w + insets.left + insets.right,
h + insets.top + insets.bottom);
//frame1.setLocationRelativeTo(null);
//frame1.createBufferStrategy(2);
//bstrategy = frame1.getBufferStrategy();
//frame1.setIgnoreRepaint(true);
requestFocusInWindow();
addKeyListener(new GameHoneGumiApplet.MyKeyAdapter());
Thread myThread = new Thread(this);
myThread.start();
}
public void goStartGamen(){
gamestate = GS_STARTGAMEN;
gamemainstate = GM_ZAKO;
//Timer t = new Timer();
//t.schedule(new GameHoneGumiApplet.MyTimerTask(), 10, 30);
}
public void goStageStart(){
initStageStart();
waittimer = 100;
gamestate = GS_STAGESTART;
}
public void goStageClear(){
initStageClear(1);
waittimer = 100;
gamestate = GS_STAGECLEAR;
}
public void goWarp(){
initStageClear(2);
waittimer = 100;
gamestate = GS_WARP;
}
public void goGameMain(){
gamestate = GS_GAMEMAIN;
}
public void goGameOver(){
initGameOver();
gamestate = GS_GAMEOVER;
}
public abstract void initStageStart();
public abstract void initStageClear(int stageStep);
public abstract void initGameOver();
public abstract void keyPressedGameMain(int keycode);
public abstract void keyReleasedGameMain(int keycode);
public void drawStringCenter(String str, int y, Graphics g) {
int fw = getWidth() / 2;
FontMetrics fm = g.getFontMetrics();
int strw = fm.stringWidth(str) /2 ;
g.drawString(str,fw-strw,y);
}
public Clip otoYomikomi(String fname) {
Clip clip = null;
try {
AudioInputStream aistream = AudioSystem.
getAudioInputStream(getClass().getResource(fname));
DataLine.Info info = new DataLine.Info(Clip.class, aistream.getFormat());
clip = (Clip)AudioSystem.getLine(info);
clip.open(aistream);
} catch (UnsupportedAudioFileException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (LineUnavailableException e) {
e.printStackTrace();
}
return clip;
}
public void midiYomikomi(String fname) {
if (midiseq == null){
try {
midiseq = MidiSystem.getSequencer();
midiseq.open();
} catch (MidiUnavailableException e1) {
e1.printStackTrace();
}
}
try {
Sequence seq = MidiSystem.getSequence(getClass().getResource(fname));
midiseq.setSequence(seq);
} catch (InvalidMidiDataException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void midiYomikomi2(String fname) {
if (midiseq2 == null){
try {
midiseq2 = MidiSystem.getSequencer();
midiseq2.open();
} catch (MidiUnavailableException e1) {
e1.printStackTrace();
}
}
try {
Sequence seq = MidiSystem.getSequence(getClass().getResource(fname));
midiseq2.setSequence(seq);
} catch (InvalidMidiDataException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//
public abstract void runStartGamen(Graphics g);
public abstract void runStageStart(Graphics g);
public abstract void runStageClear(Graphics g);
public abstract void runWarp(Graphics g);
public abstract void runGameMain(Graphics g);
public abstract void runGameOver(Graphics g);
public abstract void runShop(Graphics g);
private class MyKeyAdapter extends KeyAdapter{
public void keyPressed(KeyEvent ev) {
if (gamestate == GS_GAMEMAIN || gamestate == GS_SHOP){
keyPressedGameMain(ev.getKeyCode());
}
}
public void keyReleased(KeyEvent ev) {
int keycode = ev.getKeyCode();
switch(gamestate){
case GS_GAMEMAIN:
case GS_SHOP:
keyReleasedGameMain(keycode);
break;
case GS_STARTGAMEN:
if (keycode == KeyEvent.VK_P) goStageStart();
break;
case GS_GAMEOVER:
if (keycode == KeyEvent.VK_R) goStageStart();
}
}
}
public void run() {
try {
while(true){
repaint();
Thread.sleep(30);
}
}catch(Exception e){}
}
public void paint(Graphics g) {
Dimension size = getSize();
Image back = createImage(size.width, size.height);
Graphics buffer = back.getGraphics();
//Graphics g = bstrategy.getDrawGraphics();
//if (bstrategy.contentsLost()==false){
Insets insets = getInsets();
buffer.translate(insets.left, insets.top);
switch(gamestate){
case GS_STARTGAMEN:
runStartGamen(buffer);
break;
case GS_STAGESTART:
runStageStart(buffer);
waittimer = waittimer-1;
if (waittimer < 0) goGameMain();
break;
case GS_STAGECLEAR:
runStageClear(buffer);
waittimer = waittimer-1;
if (waittimer < 0) goStageStart();
break;
case GS_WARP:
runWarp(buffer);
waittimer = waittimer-1;
if (waittimer < 0) goStageStart();
break;
case GS_GAMEMAIN:
runGameMain(buffer);
break;
case GS_GAMEOVER:
runGameOver(buffer);
break;
case GS_SHOP:
runShop(buffer);
break;
}
//bstrategy.show();
g.drawImage(back, 0, 0, null);
g.dispose();
//}
}
/*
* スコアなどのゲームステータスの描画
*/
protected void drawStatus(Graphics g) {
// スコアとお金の描画
g.setColor(Color.WHITE);
g.setFont(new Font("SansSerif",Font.PLAIN,10));
g.drawString("SC:"+score + " HI:"+ highscore + " MONEY:" + iGotMoneyNum ,2,10);
// 取得パワーアップアイテム数ゲージ描画
g.setColor(Color.RED);
//g.fillRect(iGotItemNum * 100, GAMEN_H - 30, 80, 15);
g.fillRect(20, GAMEN_H - 5, iGotItemNum * 50, 15);
}
/*
* 通常弾と溜め弾とミサイルがザコにHITしたときの共通ザコ処理
*/
protected void commonTamaHitZako(Teki tk, Iterator it, Iterator it2, boolean isPenitrate) {
bakuhatsus.add(new Bakuhatsu(tk.chara_x, tk.chara_y, charaimage));
items.add(new Item(tk.chara_x, tk.chara_y, biItem));
// ザコ削除
it.remove();
// 弾削除
if (it2 != null && !isPenitrate) { // 貫通させないのならば弾を消す
it2.remove();
}
score = score+10;
seClip1.stop();
seClip1.setFramePosition(0);
seClip1.start();
}
/*
* 通常弾と溜め弾の共通ボス処理
*/
protected void commonTamaHitBoss(GameChara gc, Iterator it2, int iDamage) {
// 弾が当った所に爆発オブジェクトを生成
bakuhatsus.add(new Bakuhatsu(gc.chara_x, gc.chara_y, charaimage));
//lstItem.add(new Item(objBoss.chara_x, objBoss.chara_y, biItem));
//it.remove();
// 弾を消す
it2.remove();
// ボスの体力を減らす
iBossTairyoku -= iDamage;
// ボスを倒した場合
if (iBossTairyoku < 0) {
//boss = null;//ここ消してみた
// やられる動きをするボスに作り直す
if(stagenum == 1){//kurootoko
boss = new Boss(boss.chara_x, boss.chara_y, biBoss3, "0,1,10");//x,y,kaisuu
}else if(stagenum == 2){//kappa
boss = new Boss(boss.chara_x, boss.chara_y, biBoss4, "0,1,10");
}else if(stagenum == 3){//goemon
boss = new Boss(boss.chara_x, boss.chara_y, biBoss5, "0,1,10");
}else{//dragon
boss = new Boss(boss.chara_x, boss.chara_y, biBoss2, "0,1,10");
}
//gamemainstate = GM_ZAKO;
gamemainstate = GM_BOSS_EFFECT;
//goStageClear();
iBossEffectCount = 200;
return;
}
score = score+10;
seClip1.stop();
seClip1.setFramePosition(0);
seClip1.start();
}
/*
* 集中描画ロジック
*/
public void drawCenter(Graphics g) {
Iterator it;
// 画面を消去
g.clearRect(0,0,GAMEN_W,GAMEN_H);
// 背景画像描画
if (iBackgroundX < -1600) {//-GAMEN_W を1600にかえる
iBackgroundX = 0;
}
if(stagenum == 1){
g.drawImage(backimage1 ,iBackgroundX,0,this);
g.drawImage(backimage1 ,iBackgroundX + 1600,0,this);
}else if(stagenum == 2){
g.drawImage(backimage2 ,iBackgroundX,0,this);
g.drawImage(backimage2 ,iBackgroundX + 1600,0,this);
}else if(stagenum == 3){
g.drawImage(backimage3 ,iBackgroundX,0,this);
g.drawImage(backimage3 ,iBackgroundX + 1600,0,this);
}else{
g.drawImage(backimage4 ,iBackgroundX,0,this);
g.drawImage(backimage4 ,iBackgroundX + 1600,0,this);
}
// 地上の敵の描画
it = tekis.iterator();
while(it.hasNext()==true){
Teki tk = (Teki)it.next();
if (!tk.isAirForce()) {
tk.draw(g,this);
}
}
// 雲の描画
g.drawImage(backgasimage,iBackgroundX2,0,this);
g.drawImage(backgasimage,iBackgroundX2 + 1600,0,this);
// ミサイルの描画
if (missle != null) {
missle.draw(g,this);
}
// 地雷の描画
if (mine != null) {
mine.draw(g,this);
}
// 溜め撃ちの描画
it = jikitametamas.iterator();
while(it.hasNext()==true){
//System.out.println("チャージショット発射描画");
JikiTameTama jt = (JikiTameTama)it.next();
jt.draw(g,this);
}
it = jikitametamaminis.iterator();
while(it.hasNext()==true){
//System.out.println("チャージミニショット発射描画");
JikiTameTamaMini jt = (JikiTameTamaMini)it.next();
jt.draw(g,this);
}
// 自機オプションの描画
if (iGotItemNum >= 8) {//ビット
bit = new Bit(jiki.chara_x-48,jiki.chara_y+48,bitimage);
bit.draw(g, this);
}
if (iGotItemNum >= 10) {//ビット
bit = new Bit(jiki.chara_x-48,jiki.chara_y-36,bitimage);
bit.draw(g, this);
}
// バリアの描画
if (barrier != null) {
barrier.draw(g, this);
}
// 自機の描画
jiki.draw(g,this);
// 自機通常弾の描画
it = jikitamas.iterator();
while(it.hasNext()==true){
JikiTama jt = (JikiTama)it.next();
jt.draw(g,this);
}
// パワーアップアイテムの描画
it = items.iterator();
while(it.hasNext()==true){
Item bh = (Item)it.next();
bh.draw(g,this);
}
/* ザコモード固有描画 */
// 地形の描画
if (tikeimap != null) {
tikeimap.draw(g,this);
}
// 空中の敵の描画
it = tekis.iterator();
while(it.hasNext()==true){
Teki tk = (Teki)it.next();
if (tk.isAirForce()) {
tk.draw(g,this);
}
}
// 敵の弾の描画
it = tekitamas.iterator();
while(it.hasNext()==true){
TekiTama tm = (TekiTama)it.next();
tm.draw(g,this);
}
/* ボスモード固有描画 */
// ボスの描画
if (boss != null) {
boss.draw(g,this);
}
// 爆発の描画
it = bakuhatsus.iterator();
while(it.hasNext()==true){
Bakuhatsu bh = (Bakuhatsu)it.next();
bh.draw(g,this);
}
// スコアなどのゲームステータスの描画
drawStatus(g);
}
}
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
保護者対応について、
クレームが無い=評判が良い
ではない。ことを、
肝に銘じておかないといけない。
サイレントクレームの方が怖い、
ということもある。言いたいことを散々言った親の方が案外ケロっとしている場合もある。
もちろん、実情はクレームを言う親からの評判は高くないのが一般的ですが。
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
理不尽なことが多く起こっている。
でも、自分も子供に対して理不尽かもしれない。
そうでしょう?
だから、お互い理不尽なんですから、似たもの同士反響し合っているんです。
結局、隣人同士は似るというか、
結局、私と毎日7時間以上いたとしたら、そりゃ、私の人格の生き写しみたいになって、
理不尽なことの多くは、私が醸成してきた空気や雰囲気、土壌から発生してくることが多いのです。
つまり、私自身の人間的な幼さは十二分に反省しなければいけないのです。
そんなこと、言えないけど。
私の人間的な偏りは、結局、遠まわしに子供たちに影響している。
影響しまくっている。
それは看過できない。
価値観とか、立ち居振る舞いとか、喋り方とか、
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
私の2つ隣の席の人が胃をやっちゃった。
ストレスで。
この仕事ってさ、
責任が大きくて、何かあるとすぐに干されて、
労働時間が異常に長いし、忙しいし、
覚えることの範囲が多すぎるし、
新しいことをすぐ要求されるし、
試験の倍率もその割には高いし、
でも、給料はそこそこだし、
なんで、なりたがるんだろうね。
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
ドラクエのウィンドウのソース
/*
* メッセージに特化したウィンドウクラス
*
*/
package dqc;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.util.Timer;
import java.util.TimerTask;
public class MessageWindow extends Window {
// 1行の最大文字数
private static final int MAX_CHARS_PER_LINE = 30;
// 1ページに表示できる最大行数
private static final int MAX_LINES_PER_PAGE = 5;
// 1ページに表示できる最大文字数 //コメントが↑↓おかしい気が
private static final int MAX_CHARS_PER_PAGE = MAX_CHARS_PER_LINE * MAX_LINES_PER_PAGE;
// 格納できる最大行数
private static final int MAX_LINES = 128;
// Fontに合わせて変えること
// M2フォントの16.0fだとこのサイズ
private static final int FONT_WIDTH = 16;
private static final int FONT_HEIGHT = 18;
// テキストを表示する領域
private Rectangle textRect;
// メッセージを格納する配列
private char[] text = new char[MAX_LINES * MAX_CHARS_PER_LINE];
// 現在表示しているページ
private int curPage;
// 現在のページで表示した文字数(最大値: MAX_CHARS_PER_LINE * MAX_LINES_PER_PAGE)
private int curPos;
// 次のページがあるか?
private boolean nextFlag;
// ウィンドウを隠せるか?(最後まで表示したらtrueになる)
private boolean hideFlag;
// テキストを流すTimerTask
private Timer timer;
private TimerTask task;
public MessageWindow(Rectangle textRect) {
super(textRect);
this.textRect = textRect;
timer = new Timer();
}
public void draw(Graphics2D g) {
super.draw(g);
if (isVisible == false) {
return;
}
g.setColor(Color.WHITE);
// 現在表示しているページのcurPosまで表示
// curPosはDrawingTimerTaskで増えていくので流れて表示されるように見える
for (int i=0; i
char c = text[curPage * MAX_CHARS_PER_PAGE + i];
if (c == '/' || c == '%' || c == '!') continue; // コントロール文字は表示しない
int dx = textRect.x + FONT_WIDTH * (i % MAX_CHARS_PER_LINE);
int dy = textRect.y + FONT_HEIGHT + FONT_HEIGHT * (i / MAX_CHARS_PER_LINE);
g.drawString(c + "", dx, dy);
}
// 最後のページでない場合は▼を表示する
if (nextFlag) {
int dx = textRect.x + (MAX_CHARS_PER_LINE / 2) * FONT_WIDTH - 8;
int dy = textRect.y + FONT_HEIGHT + (FONT_HEIGHT * 5);
g.drawString("▼", dx, dy);
}
}
/**
* メッセージをセットする
*
* @param message メッセージ文字列
*/
public void setMessage(String message) {
curPos = 0;
curPage = 0;
nextFlag = false;
hideFlag = false;
// 全角スペースで初期化
for (int i=0; i text[i] = ' ';
}
int p = 0; // 処理中の文字位置
for (int i=0; i char c = message.charAt(i);
if (c == '/') { // 改行
text[p] = '/';
p += MAX_CHARS_PER_LINE;
p = (p / MAX_CHARS_PER_LINE) * MAX_CHARS_PER_LINE;
} else if (c == '%') { // 改ページ
text[p] = '%';
p += MAX_CHARS_PER_PAGE;
p = (p / MAX_CHARS_PER_PAGE) * MAX_CHARS_PER_PAGE;
} else {
text[p++] = c;
}
}
text[p] = '!'; // 終端記号
task = new DrawingMessageTask();
timer.schedule(task, 0L, 20L);
}
/**
* メッセージを先に進める
*
* @return メッセージが終了したらtrueを返す
*/
public boolean nextMessage() {
// 現在のページが最後のページだったらメッセージを終了する
if (hideFlag) {
task.cancel();
task = null;
return true;
}
// ▼が表示されていなければ次のページへいけない
if (nextFlag) {
curPage++;
curPos = 0;
nextFlag = false;
// TODO: ビープ音
}
return false;
}
/**
* メッセージを1文字ずつ順に描画するタスク
*
*/
private class DrawingMessageTask extends TimerTask {
public void run() {
if (!nextFlag) {
curPos++; // 1文字増やす
// テキスト全体から見た現在位置
int p = curPage * MAX_CHARS_PER_PAGE + curPos;
if (text[p] == '/') {
curPos += MAX_CHARS_PER_LINE;
curPos = (curPos / MAX_CHARS_PER_LINE) * MAX_CHARS_PER_LINE;
} else if (text[p] == '%') {
curPos += MAX_CHARS_PER_PAGE;
curPos = (curPos / MAX_CHARS_PER_PAGE) * MAX_CHARS_PER_PAGE;
} else if (text[p] == '!') {
hideFlag = true;
}
// 1ページの文字数に達したら▼を表示
if (curPos % MAX_CHARS_PER_PAGE == 0) {
nextFlag = true;
}
}
}
}
}