C言語でインベーダーゲーム作ってるんですけどランキングの表示のプログラムがネットにあり使って見ようと思ってやったんですがこのプログラムの構造体はどうかけばいいんですか?
あと構造体に子のゲームをやった人の点数を格納してそれを点数の大きい順に並び替えるのってどうするんですか?
int ranking(int key,int x,int y)
{
int loop=0;
for (loop=0;loop<5;++loop)
{
rank.score[loop]=(5-loop)*10;
rank.name[loop]="someone";
}
for (loop=0;loop<5;++loop)
{
if(rank.score[loop]<thescore)
{
ranking(loop);
}
}
return 0;
}
void special_key2(int key, int x, int y)
{
if(game.state == START)
{
switch( key )
{
case GLUT_KEY_LEFT: // 左矢印
if(battery.position.x > BATTERY_POSITION_MIN)
battery.position.x -= BATTERY_MOVE_DISTANCE;
break;
case GLUT_KEY_RIGHT: // 右矢印
if(battery.position.x < BATTERY_POSITION_MAX)
battery.position.x += BATTERY_MOVE_DISTANCE;
break;
default:
break;
}
}
}
構造体などなど
Re: 構造体などなど
コードはcodeタグで囲んでいただけると助かります。
サンプルは
こんな感じです。
コードをよく読んでいないので、合わなかったらすみません。
この代入の仕方ができるようにポインタを使っていますが、
ランキングを保存する事を考えると、ポインタではなくchar型の配列で名前を保存したほうがいいです。
一番シンプルなランキングの構造体は だと思います。C言語リアン さんが書きました:このプログラムの構造体はどうかけばいいんですか?
qsort関数を使うと楽だと思います。C言語リアン さんが書きました:あと構造体に子のゲームをやった人の点数を格納してそれを点数の大きい順に並び替えるのってどうするんですか?
サンプルは
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int score;
char* name;
} rank_t;
int comp(const void* x,const void* y) {
rank_t* a=(rank_t*)x;
rank_t* b=(rank_t*)y;
if(a->score<b->score)return 1;
if(a->score>b->score)return -1;
return 0;
}
int main(void) {
rank_t rank[5];
int i;
rank[0].score=100;
rank[0].name="石田彰";
rank[1].score=500;
rank[1].name="関智一";
rank[2].score=200;
rank[2].name="三木眞一郎";
rank[3].score=1000;
rank[3].name="宮田幸季";
rank[4].score=700;
rank[4].name="保志総一朗";
qsort(rank,5,sizeof(rank_t),comp);
for(i=0;i<5;i++) {
printf("%5d %s\n",rank[i].score,rank[i].name);
}
return 0;
}
コードをよく読んでいないので、合わなかったらすみません。
この代入の仕方ができるようにポインタを使っていますが、
ランキングを保存する事を考えると、ポインタではなくchar型の配列で名前を保存したほうがいいです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 構造体などなど
すいません。
このプログラムなら、ランキングの構造体は
ですね。
この場合qsortでやるのは無理だと思います。
ソートのアルゴリズムを学んでください。
サイト例→http://www.ics.kagoshima-u.ac.jp/~fuchi ... algorithm/
交換するときに、scoreとnameのそれぞれ同じ位置同士を一緒に交換します。
比較するのはscoreです。
あと、どこのサイトを参考にしたかも教えてください。
このプログラムなら、ランキングの構造体は
#define RANKING_MAX 10 /*ランキングの最大数*/
typedef sturct {
int score[RANKING_MAX];
char* name[RANKING_MAX];
} rank_t;
この場合qsortでやるのは無理だと思います。
ソートのアルゴリズムを学んでください。
サイト例→http://www.ics.kagoshima-u.ac.jp/~fuchi ... algorithm/
交換するときに、scoreとnameのそれぞれ同じ位置同士を一緒に交換します。
比較するのはscoreです。
あと、どこのサイトを参考にしたかも教えてください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)