C言語でゲームのスタミナ計算が可能?初心者向け

このQ&Aのポイント
  • C言語のプログラムでゲームのスタミナの計算をしてみたい方へ
  • お使いのゲーム『ラブライブのスクフェス』で、LPの残りから全回復までの時間を計算するプログラムを作りたいですが、時間を計算する方法がわかりません。
  • LPの上限値から現在値を引いた残りのLPを表示できるようになりましたが、後は時間を計算する方法が分からないです。C言語のプログラム作成に不慣れな方でもわかりやすいように説明していただけると助かります。
回答を見る
  • ベストアンサー

C言語でゲームのスタミナ計算って可能?(初心者)

C言語のプログラムでゲームのスタミナの計算をしてみたいのですが可能でしょうか? ラブライブのスクフェスというゲームの残りのスタミナ(LP)からあと何時間何分で全回復するかというプログラムを作ってみたいのですがLPの残りの計算まではできたのですがLPの値から時間(何時間何分かかる)を出す方法が分からないです。 スタミナ(LP)1つにつきで6分掛かるのでスタミナの上限値から現在値をひいた残りのスタミナの値から何時間何分かを計算して出力するプログラムです。 自分で作りかけたのですが残りのスタミナを表示後あと何時間何分掛かるか計算する方法が分からないです・・・ #include <stdio.h> int main(void) { int lp, lpmax, nowlp, restlp; /*lp; 6分で1回復 lpmax;あなたのLPの上限値 nowlp;あなたの現在のLP restlp;上限時から現在値を引いた残りのLP*/ lp = 6; lpmax = 0; printf("LPの上限を入力してください\n"); scanf_s("%d", &lpmax); printf("貴方の現在のLPを入力してください\n"); scanf_s("%d", &nowlp); restlp = lpmax - nowlp; printf("あなたの残りのLPは%dです\n", restlp); (そのあとが分からないです) c言語全くわからなく無謀かもしれませんがスタミナ計算のプログラムの作り方を教えて下さい。よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

> (restlp / 6) 分で回復(上限値に到達)するんじゃ ないんですか? ごめんマチガイ。 1回復するのにlp分かかるんだから、restlp回復するのには restlp*lp 分。 これを60で割った商Qと余りRで Q時間R分。

musashino209
質問者

お礼

おかげさまでプログラム作ることが出来ました。カウントダウンは出来ませんでしたが満足しております。 アドバイスありがとうございます。

musashino209
質問者

補足

ありがとうございます。秒表示はしておりませんが分までの表示はすることができました。 出来たのが↓↓ #include <stdio.h> #include <stdlib.h> int main(void) { int lp, lpmax, nowlp, restlp, time ; /*lp; 6分で1回復 lpmax;あなたのLPの上限値 nowlp;あなたの現在のLP restlp;上限時から現在値を引いた残りのLP*/ lp = 6; /*LP(スタミナ)が1回復するのにかかる時間 6分*/ printf("ラブライブ!スクフェスのLPと回復時間を表示するプログラムです。\n秒表示には対応していません。\n"); printf("\n"); printf("あなたの上限のLPを入力してね。\n"); /*上限のLP(スタミナ)を入力*/ printf("\n"); scanf_s("%d", &lpmax); printf("\n"); printf("あなたの現在のLPを入力してね。\n"); /*今現在のLP(スタミナ)を入力*/ printf("\n"); scanf_s("%d", &nowlp); printf("\n"); restlp = lpmax - nowlp; /*残りのLP(スタミナ)を上限のLPから今現在のLPを引いて計算*/ printf("今から全回復までのLPは%dだよ!\n", restlp); printf("\n"); time = lp*restlp; /*LP1回復するのに6分掛かるので残りのLPを掛けて残り時間(分)を計算*/ div_t d; d = div(time, 60); /*時間分から一時間(60分)を割り時間を出し、余りを分で表示する*/ printf("あなたのLPが全回復するまでおよそ%d時間%d分掛かるよ!\n", d.quot, d.rem); printf("\n"); printf("穂乃果が応援してるよ!!\n"); return 0; 正しく表示することが出来ました。 表示された時間からカウントダウン表示するにはどのようにすれば良いのでしょうか? 分かれば教えて下さい。よろしくお願いします。

その他の回答 (4)

  • Wap58
  • ベストアンサー率33% (29/87)
回答No.5

// 環境依存で使い分けて下さい // time.hは他に良い使い方があると思う #include <stdio.h> #include <unistd.h> /* UNIX,sleep() */ // #include <windows.h> /* DOS,Sleep() */ // #include <time.h> /* time.hを使うなら */ int main(void){ // int sec_1 = restlp * lp * 60; int sec_1 = 20 * 6 * 60; int tim_1; // int rim_1; time_t tm; /* time.h */ do{ fflush(stdout); /* DOSなら必要無し */ //////// time.h //////// // rim_1 = time(&tm); // while(time(&tm) < rim_1+1){} //////// time.h //////// tim_1 = sec_1 / 3600; printf(" 残り %d時間 %d分 %d秒 \r", tim_1,(sec_1-tim_1*3600)/60,sec_1%60); sec_1--; sleep(1); /* UNIX */ // Sleep(1000); /* DOS */ }while(0 < sec_1); return 0; }

回答No.4

> 表示された時間からカウントダウン表示するにはどのようにすれば良いのでしょうか? time() 関数で現在時刻を得られます。これによってアプリケーションを起動したときの時刻:T0 と 任意の時刻 T1 との差 d をとれば時間経過(秒)がわかります。restlp - d*(1秒あたりの回復量) が現在の restlp ですから回復時間に換算できます。

musashino209
質問者

お礼

アドバイスありがとうございます。カウントダウン試してみたのですが上手く行かず秒表示はない状態で作りました。

  • Wap58
  • ベストアンサー率33% (29/87)
回答No.2

int min_1,tim_1; min_1 = restlp * lp % 60; tim_1 = restlp * lp / 60; printf("残り時間 %d 時間 %d 分です。\n",(tim_1)? tim_1 : 0,min_1);

musashino209
質問者

お礼

回答有り難うございます!

musashino209
質問者

補足

助かりました。プログラムを作ることができました。 お礼申し上げます。

回答No.1

(restlp / 6) 分で回復(上限値に到達)するんじゃ ないんですか?

musashino209
質問者

お礼

はい。それは把握しております。 回答有り難うございます!

関連するQ&A

  • 私はC言語を習い始めて5日の初心者です。

    私はC言語を習い始めて5日の初心者です。 下記のプログラムが動かないので優しく教えてください。 どうかお願いします。 #include <stdio.h> int main() { int ans1,ans; int total printf("コンビニ行くときは(1:車で 2:自転車で 3:歩いて)行く\n"); scanf("%d",&ans1); printf("1:汗かいた記憶がない 2:たまに汗かく 3:よく汗をかく\n"); scanf("%d",&ans2); total=ans1+ans2; if (total<4) { printf("運動不足です\n"); }else { printf("良く運動していますね\n"); } return(0); }

  • C言語初心者です。計算がうまく出来ず困っています。

    「苦しんで覚えるC言語」というサイトに載っている以下の問題を解きたいのですが、プログラムにエラーは出ないものの正常な結果が出ません。 定価を入力すると、1割引、3割引、5割引、8割引の値段を一覧表示するプログラムを作成せよ。 なお、結果の金額は整数値での表示が望ましいが、実数でもかまわない。 私は以下のようにプログラムを書いたのですが、実行して数値を入力すると、「0 ,0 ,0 ,0」と表示されてしまいます。 #include <stdio.h> int main(void) { int price,one,three,five,eight; scanf("%d",&price); /* 入力部分 */ one = price*0,9; three = price*0,7; five = price*0,5; eight = price*0,2; printf("%d ,%d ,%d ,%d \n",one,three,five,eight); return 0; } サイトでの解答は以下のようになっており、解答の他にも、変数を使用して書いても良いとあります。 #include <stdio.h> int main(void) { int price; printf("定価を入力して下さい : "); scanf("%d",&price); printf("1割引 = %d円\n",(int)(price * 0.9)); printf("3割引 = %d円\n",(int)(price * 0.7)); printf("5割引 = %d円\n",(int)(price * 0.5)); printf("8割引 = %d円\n",(int)(price * 0.2)); return 0; } これより前の内容を復習したり、調べたりもしたのですが、自分ではどこに間違いがあるのか見つけられませんでした。非常に初歩的な内容で恐縮ですが、助言をお願いします。

  • C言語で計算が合いません(初心者)

    C言語で計算が合いません(初心者) 簡単な計算のプログミングをしているのですが 計算が合わなくて困っています。 整数型変数aと実数型変数bを定義 整数型変数cとdを定義して、c=0.5*a*b、d=a/2*b 実数型変数eとfを定義して、e=0.5*a*b、f=a/2*b という内容のプログラムを作ったのですが a=7,b=2.4を代入してみた結果 ---------------------------- Input a>>7 Input b>>2.4 8 7 8.400000 7.200000 ---------------------------- となりました どこが間違っているのでしょう? 答えは8.4でcが8なのは有効数字のためだと思いますが dとeで答えが全く違う理由が分かりません。 下に私が書いたものを貼っています。 ---------------------------- #include<stdio.h> int main(void){ int a,c,d; double b,e,f,ans; printf("Input a>>"); scanf("%d",&a); printf("Input b>>"); scanf("%lf",&b); c=0.5*a*b; printf("%d\n",c); d=a/2*b; printf("%d\n",d); e=0.5*a*b; printf("%lf\n",e); f=a/2*b; printf("%lf\n",f); return 0; } ---------------------------- よろしくお願いします。

  • 教えてください。C言語初心者です。

    #include <stdio.h> int main() { int sentaku,hakoA=0,hakoB,*kiroku[10]; char *name[10]; while (sentaku !=3){ printf("1:新規登録\n"); printf("2:データ確認\n"); printf("3:終了\n"); scanf("%d",&sentaku); switch (sentaku){ case 1: printf("登録する名前を入力してください。---"); scanf("%s",name[hakoA]); printf("記録を入力してください。---"); scanf("%d",&kiroku[hakoA]); printf("登録番号は%d番です。\n",hakoA); hakoA++; printf("登録を終了します。\n"); continue; case 2: if (hakoA==0){ printf("登録されてません\n"); continue; }else{ printf("登録番号を入力して下さい。---"); scanf("%d",&hakoB); printf("%s君で記録は%dです。\n",name[hakoB],kiroku[hakoB]); continue; } case 3: break; default : printf("1~3でお願いします。\n"); continue; } } return 0; } このプログラムはコンパイルされたのですが、実行で入力してるとエラーになってしまうのです。 まだ勉強始めたばかりでちょっとなぜか解らないのです。どこかおかしいところがありましたらご教授いただけると嬉しいです。おねがいします。

  • C言語/プログラミング

    秒を%d時間%d分%d秒に変換するプログラミングを教えてください。計算でちょっと積んでます... [現在のプログラミング] #include <stdio.h> void Time(int s) { int ans1, ans2; printf("秒を入力してください\n"); scanf_s("%d", &s); ans1 = s / 3600; ans2 = s / 60; printf("[計算結果]%d秒 = %d時間%d分%d秒\n", s, ans1, ans2); return 0; } int main(int s) { Time(0); return 0; }

  • C言語の初心者です。

    ポインタについて教えてください。 #include <stdio.h> int main() { int *p,a[2],i=0; p=a; scanf("%d",p); printf("%d\n",*p); i++; scanf("%d",p+i); printf("%d\n",*(p+i)); return 0; } これは整数を入力して出力といった簡単なプログラムなのですが、こういうポインタの使いかたって普通はしないでしょうか・・?。ポインタは使わずにこういう場合は2次元配列とかで出すのが普通なのでしょうか? また、下のプログラムなのですが、上記のプログラムをただ単にキャラ型で試しただけなのですが、どうして実行時エラーがおこってしまうのでしょうか? printfのところの*nameの、*を抜くと実行時エラーはおこりません。しかし、上記の整数では*はつけたままでも エラーしません。 整数とキャラ型では何かちがうのでしょうか?? #include <stdio.h> int main() { char *name,a[10]; name=a; printf("入力---"); gets(name); printf("%s\n",*name); return 0; } 初心者特有の質問をしてしまって申しわけございません。でも、ずっと悩んでて、すこしずつでもポインタの本当の使いかたを知りたいとおもいまして、初期段階ではありますがどうしても解らなかったので質問させていただきました。 そういうものだから!以外でご説明いただける方がいらっしゃいましたら宜しくお願いいたします。

  • C言語

    このプログラムを作りたいのですが… ??????????? 物の総数を入れてください:12 取り出す物の数を入れてください:2 12個の異なる物から2個をを取り出す組み合わせの数は66です ?????????????? ここに出てくる数字は scanfで入れます。 だいたい こんな感じだと思うのですが… ***********の部分が わかりません。 ??????????????? #include<stdio.h> int factorial(int m,int r) { ************** } int main(void) {int a,b; printf("物の総数を入れてください:") scanf("%d",&a); printf("取り出す物の数を入れてください:") scanf("%d",&b); printf("12個の異なる物から2個を取り出す組み合わせの数は%dです。\n",a,b,factorial(a,b));) ?????????????? お願いします(>_<)

  • C言語のswitch文について間違っているところを教えてください

    初めに初心者ですので間違っているところは説明つきの回答をしていただければありがたいです。 今回switch文を使って 「足し算、引き算、掛け算、割り算」のプログラムを作ったつもりなのですが、intを使うと割り算の小数点が出ないしfioat文を使うとswitch文には、使えないと出るしどのようにしたら良いのか御回答よろしくお願いします。 (今は、int文でプログラムを作っているつもりです。) #include <stdio.h> void main (void) { int a,b,k; printf("どのような計算をしたいか数字を選んでください。\n"); printf(" 1.足し算 (例 a+b)\n"); printf(" 2.引き算 (例 aーb)\n"); printf(" 3.掛け算 (例 a×b)\n"); printf(" 4.割り算 (例 a÷b)\n"); printf("計算したい番号を入力してください "); scanf("%d",&k); switch (k){ case 1: printf("aを入力してください "); scanf("%d",&a); printf("bを入力してください "); scanf("%d",&b); printf("\n答えは a+b で %d です\n",a+b); break; case 2: printf("aを入力してください "); scanf("%d",&a); printf("bを入力してください "); scanf("%d",&b); printf("\n答えは aーb で %d です\n",a-b); break; case 3: printf("aを入力してください "); scanf("%d",&a); printf("bを入力してください "); scanf("%d",&b); printf("\n答えは a×b で %d です\n",a*b); break; case 4: printf("aを入力してください "); scanf("%d",&a); printf("bを入力してください "); scanf("%d",&b); printf("\n答えは a÷b で %d です\n",a/b); break; default: printf("明記してあるどれかの数字を再入力してください"); } }

  • c言語超初心者です。2

    #include <stdio.h> int main(void) { int na,nb, nc; int sum; double ave; puts("三つの整数を入力してください."); printf("整数A:"); scanf("%d", &na); printf("整数B:"); scanf("%d", &nb); printf("整数C:"); scanf("%d", &nc); sum=na+nb+nc; ave=(double)sum/3; printf("それらの合計は%5dです。\n", sum); printf("それらの平均は%5.1fです。\n",ave); return(0); } とういうのを作ったんですが、最後のそれらの合計は%5dとやりその5の意味は整数を10進法で少なくても5桁で表示とありますが、例えば1,2,3と入力しても合計は6とでて5桁ででないんですけど。そういう意味ではありませんか?あとave=(double)sum/3;のところをave=sum/3.0としても問題なくできるのですが、どっちでやったほうがいいとかはありますか?もしあったらその理由も教えてください。

  • C言語の問題

    自分の生まれた日から、今日までの生存日数を求めよ。(但し、うるう年なども計算するプログラム)という問題を提示されたのですが、ぜんぜんわかりません。どなたか上記プログラムがわかる方、ご教授お願いいたします。 #include<stdio.h> int main(void) { int table1[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int table2[13]={0,31,29,31,30,31,30,31,31,30,31,30,31}; int mm,dd,i,day=0; /*(1)指定月日までの日数計算*/ do { printf("月>"); scanf("%d",&mm); if(mm>=1 && mm<=12)break; printf("月(%d)は誤りです。\n",mm); }while(1); do { printf("日>"); scanf("%d",&dd); if(dd>=1 && dd<=table1[mm])break; printf("日(%d)は誤りです。\n",dd); }while(1); for(i=1;i<mm;i++) day += table1[i]; day += dd; printf("1/1から%d/%d迄の日数は%d日です。\n",mm,dd,day); return 0; } ↑参考までにこんなプログラムでやっています。

専門家に質問してみよう