# HG changeset patch # User koba # Date 1261046980 -32400 # Node ID c133f42d5dbf4bda551572f2a0ea9aac69642a2c # Parent 3072d75b0e230d14f524d53a713a510b5600ec3b add Huffman_coding source diff -r 3072d75b0e23 -r c133f42d5dbf document/presentation/semi09_12_08.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/document/presentation/semi09_12_08.html Thu Dec 17 19:49:40 2009 +0900 @@ -0,0 +1,106 @@ + + + + + +ゼミ資料 09/12/08 + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+ + + +
+ + +
+

Cerium を用いた
+Game Programming における
+テスト手法の提案

+

小林 佑亮

+

琉球大学 理工学研究科 情報工学専攻

+

No.098581D

+
+ + +
+

研究背景・目的

+
    + +
  • Cell 上のプログラムをテストしたい
  • +
  • 当研究室で開発した Cerium Game Engine を使用する
  • +
  • Task 単位での単体テストをする
  • +
  • 現行のCeriumをテストした状態の物と比較する +
  • Task の依存関係・実行順序も考慮する
  • +
+ + + +
+ +
+

DOING

+
    +
  • collision
  • +
  • sgoex
  • +
+
+ +
+

collision

+
    +
  • 暫定的に関数名はcollision_00〜11に
  • +stack_xyz[]で +
  • collisionのセット
  • +
  • Playerも要書き換え
  • +
+
+ +
+

sgoex

+
    +
  • DefSprite, PutSpriteの定義
  • +
  • sptableはそのまま?
  • +
+
+ +
+ + diff -r 3072d75b0e23 -r c133f42d5dbf works/HuffmanCoding/HuffCoding.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/works/HuffmanCoding/HuffCoding.c Thu Dec 17 19:49:40 2009 +0900 @@ -0,0 +1,131 @@ +#include "useSDL.h" +#include "HuffCoding.h" + +/* RGBǡɽ */ +void +printRGB(SDL_Surface* surface) +{ + int i, j; + + for (i = 0; i < surface->h; i++) { + for (j = 0; j < surface->w; j++) { + printf("Red: %u ", getRGB(surface, getPixel(surface, i, j)).r); + printf("Green: %u ", getRGB(surface, getPixel(surface, i, j)).g); + printf("Blue: %u\n", getRGB(surface, getPixel(surface, i, j)).b); + } + } + printf("\n"); +} + +/* νи٤νסϥեޥڤԤ */ +int +initHuff(SDL_Surface* surface, NodePtr node) +{ + int freeNode, root; + int min1, min2; + int i, j; + + /* ե饰ȥȽ */ + for (i = 0; i <= NODE_SIZE; i++) { + node[i].count = 0; + node[i].frag = 0; + } + + /* Ǿõϥեޥںɬפ */ + node[INDEX_NODE].count = 10000; + + /* о򽸷 */ + for (i = 0; i < surface->h; i++) { + for (j = 0; j < surface->w; j++) { + /* ϥ쥤ʤΤR,G,BɤͤǤ⤪ */ + node[getRGB(surface, getPixel(surface, i, j)).r].count++; + node[getRGB(surface, getPixel(surface, i, j)).r].frag = 1; + } + } + + /* ǾͤõƥϥեޥڤοƻҴط */ + for (freeNode = CHARA_NUM+1; freeNode < INDEX_NODE; freeNode++) { + seachMin(node, &min1, &min2); + + if (min2 == INDEX_NODE) { + root = freeNode-1; + break; + } + + makeTree(node, freeNode, min1, min2); + } + + return root; +} + +/* и٤κǾȤʤ2ͤ */ +void +seachMin(NodePtr node, int* min1, int* min2) +{ + int i; + + *min1 = *min2 = INDEX_NODE; + + for (i = INDEX_NODE-1; i >= 0; i--){ + if (node[i].frag == 1) { + if (node[i].count < node[*min1].count) { + *min2 = *min1; + *min1 = i; + } + else if (node[i].count < node[*min2].count){ + *min2 = i; + } + } + } +} + +/* ϥեޥ沽Υ롼˴ŤƥϥեޥڤĤ */ +void +makeTree(NodePtr node, int freeNode, int min1, int min2) +{ + node[freeNode].child = min1; + node[freeNode].last_child = min2; + + node[freeNode].count = node[min1].count + node[min2].count; + node[freeNode].frag = 1; + + node[min1].parent = node[min2].parent = freeNode; + node[min1].frag = node[min2].frag = 0; +} + +/* ϥեޥ沽ɤ֤ */ +void +putHuffCode(NodePtr node, int root) +{ + int depth = root - (CHARA_NUM+1); + int* bit_buff = (int *)malloc(sizeof(int)*depth); + int bitp, codep; + int parent; + int i, j; + + + for (i = 0; i <= CHARA_NUM; i++) { + bitp = codep = 0; + + if (node[i].count != 0 ) { + j = i; + + do { + parent = node[j].parent; + bit_buff[bitp] = (node[parent].child == j) ? 0 : 1; + j = parent; + bitp++; + } while (j != root); + + do { + if (bit_buff[bitp--] == 1) { + node[i].code[codep] = '1'; + } else { + node[i].code[codep] = '0'; + } + codep++; + } while (bitp > 0); + } + } + free(bit_buff); +} diff -r 3072d75b0e23 -r c133f42d5dbf works/HuffmanCoding/HuffCoding.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/works/HuffmanCoding/HuffCoding.h Thu Dec 17 19:49:40 2009 +0900 @@ -0,0 +1,39 @@ +#ifndef INCLUDE_HUFF_CODING_H +#define INCLUDE_HUFF_CODING_H