スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

web拍手 by FC2   

昨日と今日のこと

どーもこんにちは。
今日はjavascriptと格闘したのでコード表示がなんとかいい感じになりました。
他にもちょいちょいいじってみました。

【ブログ】
jQueryを導入したので、今後いろいろ手入れしていく予定。
そのさきがけとして、まずは画像表示を。

【画像表示】
ThickBoxを導入。
それに伴い、過去記事の画像表示の部分も変更。

【コード表示】
<pre id="code" class="~~"> コード本体 </pre>と、シンプルに記述できるように変更。
今までのがやけにいろいろ長かったんですね・・・

簡易ハイライト機能追加。対応言語はRuby、Cpp、Bat。
正規表現を組めばいくらでも追加できるから、コードを貼る機会があれば、追加していく予定。
大体いい感じなんですが、string s = "its do while loop."; のように被る部分は色が・・・

クリップボードへのコピーを不可にし、代わりに全選択を配置。
今までは、textContentが定義されていれば全選択、なければクリップボードへコピー、という形でしたが、これからはどのブラウザでも全選択にしました。

あとは、jQueryを使ってコード枠をぐいーっと広げたりしてみたいな、と思っていたり。
これは近いうちにやると思います。

それと、id指定でコード表示をしてるので、1ページにタグが被ったりすると使えないかもなんですね。
これではイカンので、class指定でうまいことできるようにしたいです。
<pre class="code:cpp">のような感じかなぁ・・・


C言語の表示のテスト。

以前作ったものです。
もしかしたらバグなどあるかもなので、実行する場合は自己責任のもとでお願いします。
操作説明:AとDで移動してWで攻撃。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <string.h>
#include <windows.h>
#include <conio.h>

#define XMAX 35
#define XMAX2 (XMAX+4)
#define YMAX 20
#define YMAX2 23
#define XBUFMAX (XMAX2+15)
#define YBUFMAX (YMAX2)
#define BUFMAX (XBUFMAX*YBUFMAX)
#define frameRate (1000/250)
#define BULLETMAX 5
#define ZIBUNBULLETMAX 20
#define ENEMYMAX 20
#define HitScore 10

#define ZIBUN_CHAR '\\'

#define DrawPOINT(x,y) (buffer[(x)+(y)*XBUFMAX])
#define DrawOBJ(obj) (DrawPOINT((obj)->x+2, (obj)->y+1))
#define DrawString(x,y,str) { memcpy(&DrawPOINT(x,y), str, sizeof(str)-1); }while(0)

#define ArraySize(ary) ((int)(sizeof(ary)/sizeof(ary[0])))

typedef struct{
	int hp;
	int x, y;
	char c;
	int type;
} Bullet;

typedef struct{
	int hp;
	int x, y;
	char c;
	int bc, neb;
	int score;
	Bullet* bullet;
} Chara;

int Score=0;

void testSTD(){
	fseek(stdout,10,5);
}

void draw(Chara enemies[], Chara* zibun){

	Chara* cpene = enemies;
	Bullet* cpbul;
	char buffer[BUFMAX];
	char scoretmp[7];
	int i;
	memset(buffer, ' ', sizeof(buffer));

	for(;cpene->hp!=-2;cpene++){
		cpbul = cpene->bullet;
		for(i=0;cpbul->hp!=-3;i++){
			if(cpbul->hp == -1) DrawOBJ(cpbul) = cpbul->c;
			cpbul++;
		}
		if(cpene->hp >= 1) DrawOBJ(cpene) = cpene->c;
	}
	for(i=1; i<YMAX2; i++){ DrawPOINT(XMAX2-1,i) = '|'; DrawPOINT(0,i) = '|'; buffer[i*XBUFMAX-1] = '\n'; }
	for(i=0; i<XMAX2; i++){ DrawPOINT(i,0) = '-'; DrawPOINT(i,YMAX2-1) = '-'; }
	DrawPOINT(XBUFMAX-1,0) = '\n';
	
	sprintf(scoretmp, "%06d", Score);
	DrawString(XMAX2+1, 2, "Score");
	DrawString(XMAX2+3, 3, scoretmp);
	DrawString(XMAX2+3+7, 3, "点");

	DrawString(XMAX2+1, 5, "Player");
	for(i=0; i<zibun->hp-1; i++)
		DrawPOINT(XMAX2+3+i*2, 6) = ZIBUN_CHAR;

	DrawOBJ(zibun) = zibun->c;

	cpbul = zibun->bullet;
	for(i=0;cpbul->hp!=-3;i++){
		if(cpbul->hp == -1) DrawOBJ(cpbul) = cpbul->c;
		cpbul++;
	}
	
	sprintf(scoretmp, "%s:%1d", "Mode", zibun->score);
	DrawString(XMAX2+1, 8, scoretmp);

	buffer[BUFMAX-1] = '\0';
	printf("%s", buffer);
	fflush(stdout);
}

int isHit2(Chara* a, Bullet* bt){
	Bullet* j=bt;
	for(; j->hp!=-3; j++){
		if(j->hp == -1)
			if(j->x == a->x)
				if(j->y <= a->y+1 && j->y >= a->y)
					return 1;
	}
	return 0;
}

int isHit(Chara* a, Bullet* bt[]){
	int i;
	for(i=0; i<ENEMYMAX; i++){
		if(isHit2(a, bt[i]) == 1) return 1;
	}
	return 0;
}


void setup(Chara* zibun, Chara enemies[], Bullet* bullets[]){

	int i, j;
	int r;

	zibun->bullet = (Bullet*)malloc(sizeof(Bullet) * (ZIBUNBULLETMAX+1));
	for(j=0; j<ZIBUNBULLETMAX; j++){
		zibun->bullet[j].hp = -2;
		zibun->bullet[j].x = 0;
		zibun->bullet[j].y = 0;
		zibun->bullet[j].c = '|';
		zibun->bullet[j].type = 0;
	}
	zibun->bullet[ZIBUNBULLETMAX].hp = -3;


	enemies[ENEMYMAX].hp = -2;

	for(i=0; enemies[i].hp != -2; i++){
		enemies[i].x = (i % 5) * 4 + 3;
		enemies[i].y = (int)(i / 5)*2;
		//r = rand() % 5;
		r = enemies[i].y/2;
		enemies[i].hp = r+1;
		enemies[i].c = (r==0 ? 'w': (r==1 ? 'm': (r==2 ? 'n': (r==3 ? 'x': r==4 ? 'g' : '+'))));
		enemies[i].bc = rand() % 30 + 5;
		enemies[i].neb = 0;
		enemies[i].score = (5-r) * 20+20;
		enemies[i].bullet = (Bullet*)malloc(sizeof(Bullet) * (BULLETMAX+1));
		for(j=0; j<BULLETMAX; j++){
			enemies[i].bullet[j].hp = -2;
			enemies[i].bullet[j].x = 0;
			enemies[i].bullet[j].y = 0;
			enemies[i].bullet[j].c = '|';
			enemies[i].bullet[j].type = r;
		}
		enemies[i].bullet[BULLETMAX].hp = -3;
		bullets[i] = enemies[i].bullet;
	}
}

int main(){
	Chara enemies[ENEMYMAX+1];
	Chara zibun={3, XMAX/2, YMAX-3, ZIBUN_CHAR, 0, 0, 0};
	Bullet* bullets[ENEMYMAX+1];
	int i, j;
	int r;
	int movingX=1, movingXtmp, movingY;
	int EnemySpeed=5;
	long int frameCount=0;

	srand((unsigned)time(NULL));

	setup(&zibun, enemies, bullets);

	while(1){
		if(isHit(&zibun, bullets)==1){
			zibun.hp--;
			if(zibun.hp < 0) goto ENDPOINT;
			zibun.x = 0;
		}
		for(i=0; enemies[i].hp != -2; i++){
			if(enemies[i].hp <= 0) continue;
			if(isHit2(&enemies[i], zibun.bullet) == 1){
				enemies[i].hp--;
				Score += HitScore;
				if(enemies[i].hp <= 0){
					Score += enemies[i].score;

				}
				zibun.neb = 0;
				zibun.bullet[0].hp = -2;
			}
		}

		if((frameCount % (frameRate*EnemySpeed)) == 0){
			movingXtmp = 0;
			movingY = 0;
			for(i=0; enemies[i].hp != -2; i++){
				if(enemies[i].hp > 0) {
					if(enemies[i].x+movingX >= XMAX-1){
						movingX = -1;
						movingY = 1;
						break;
					}else if(enemies[i].x+movingX <= 0){
						movingX = 1;
						movingY = 1;
						break;
					}
					enemies[i].x += movingX;
					if(enemies[i].x+movingX >= XMAX-1){
						movingXtmp = -1;
						movingY = 1;
					}else if(enemies[i].x+movingX <= 0){
						movingXtmp = 1;
						movingY = 1;
					}
					enemies[i].bc -= 1;
					if(enemies[i].bc <= 0){
						//if(enemies[i].neb >= BULLETMAX) enemies[i].neb = 0;
						if(enemies[i].bullet[enemies[i].neb].hp != -1){
							enemies[i].bullet[enemies[i].neb].hp = -1;
							enemies[i].bullet[enemies[i].neb].x = enemies[i].x;
							enemies[i].bullet[enemies[i].neb].y = enemies[i].y+1;
							enemies[i].bullet[enemies[i].neb].c = '|';
							enemies[i].bc = 20 + rand() % 20;
							enemies[i].neb++;
						}
					}
				}
				for(j=0; j<BULLETMAX; j++){
					if((*(bullets[i]+j)).hp == -1){
						(*(bullets[i]+j)).y+=2;
						if((*(bullets[i]+j)).y >= YMAX){
							(*(bullets[i]+j)).hp = -2;
							enemies[i].neb = j;
						}
					}
				}
			}
			if(movingY != 0) for(i=0; enemies[i].hp != -2; i++) enemies[i].y += 1;
			if(movingXtmp != 0) movingX = movingXtmp;
		}

		if((frameCount % (frameRate)) == 0){
			for(j=0; j<ZIBUNBULLETMAX; j++){
				if(zibun.bullet[j].hp == -1){
					zibun.bullet[j].y--;
					if(zibun.bullet[j].y == -1){
						zibun.bullet[j].hp = -2;
						//zibun.neb=0;
					}
				}
			}
			if(zibun.score == 2){
				zibun.bullet[zibun.neb].x = zibun.x;
				zibun.bullet[zibun.neb].y = zibun.y-1;
				zibun.bullet[zibun.neb].c = '|';
				zibun.bullet[zibun.neb].hp = -1;
				zibun.neb++;
				if(zibun.neb >= ZIBUNBULLETMAX) zibun.neb = 0;
			}
		}

		while(kbhit()){
			int key=getch(), tmpFg=0;
			if(key=='a' && zibun.x>0)
				zibun.x--;
			else if(key=='d' && zibun.x<XMAX-2)
				zibun.x++;
			else if(key=='w' && zibun.neb<ZIBUNBULLETMAX){
				if( (zibun.score == 0 && zibun.bullet[(zibun.neb==0?0:zibun.neb-1)].hp != -1) || (tmpFg == 0 && zibun.score == 1) ){
					zibun.bullet[zibun.neb].x = zibun.x;
					zibun.bullet[zibun.neb].y = zibun.y-1;
					zibun.bullet[zibun.neb].c = '|';
					zibun.bullet[zibun.neb].hp = -1;
					zibun.neb++;
					if(zibun.neb >= ZIBUNBULLETMAX) zibun.neb = 0;
					if(zibun.score == 1) tmpFg = 1;
				}
			}else if(key=='c'){
				zibun.score++;
				if(zibun.score >= 3) zibun.score = 0;
			}
			if(key=='q') return 0;
		}

		system("cls");
		draw(enemies, &zibun);
		Sleep(frameRate);
		frameCount++;
	}
ENDPOINT:
	zibun.c = '#';
	system("cls");
	draw(enemies, &zibun);

	printf("\nどっかーん\n");

	free(zibun.bullet);
	for(i=0; enemies[i].hp != -2; i++) free(enemies[i].bullet);

	while(1);
	return 0;
}

web拍手 by FC2   

コメントの投稿


非公開コメント

コメント

STERS's Development Room

STERSの開発室っぽい何か。


プロフィール

Name:STERS
Unity3D/C#/PHP/js/C++/VB
などを勉強中です

[STERS's Room]
[ファイル置き場]

カテゴリー
最近の記事
最近のコメント
カレンダー
03 ≪│2017/04│≫ 05
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -
RSSリンクの表示
ブログ内Google検索
Google
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。