質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

994閲覧

グラフィカルコンソールを使った簡単な恋愛シミュゲーのプログラムについて

yoshiteru21

総合スコア44

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2019/04/05 02:16

編集2019/04/05 07:07

イメージ説明グラフィカルコンソールを使い、テキストファイルを読み込んで簡単な恋愛ゲームのプログラムを作りました。
ゲーム終了の最後の画面で画像が切り替わるのですがその時に画像のように文字が浮かんだままの状態になるのですがどのようなプログラムを組めば消すことができるのでしょうか?
visual stdio2017 winコンソール

#include <GConsoleLib.h> #include <stdio.h> #include "pch.h" #include <string.h> #include <wchar.h> #include <stdlib.h> #include <time.h> #include <locale.h> //画像データ char *gp_backimage; char g_backimage[256] = { "C:\Users\PG002\Pictures\12c2015sample\GConsole追加ファイル\sampleimg\chap6-1-back.png", }; char g_faceimage[][128] = { "C:\Users\PG002\Pictures\12c2015sample\GConsole追加ファイル\sampleimg\chap6-1-bad.png", "C:\Users\PG002\Pictures\12c2015sample\GConsole追加ファイル\sampleimg\chap6-1-natural.png", "C:\Users\PG002\Pictures\12c2015sample\GConsole追加ファイル\sampleimg\chap6-1-good.png" }; char g_endimage[][256] = { "C:\Users\PG002\Pictures\12c2015sample\GConsole追加ファイル\sampleimg\badend.jpg", "C:\Users\PG002\Pictures\12c2015sample\GConsole追加ファイル\sampleimg\true.jpg", "C:\Users\PG002\Pictures\12c2015sample\GConsole追加ファイル\sampleimg\happy.jpg", "C:\Users\PG002\Pictures\12c2015sample\GConsole追加ファイル\sampleimg\9.jpg" }; char g_imagebuf[256]; //コマンドのファイルパスを記憶しておくバッファ //グローバル変数 wchar_t g_name[80]; //プレーヤーの名前 int g_loverate = 50; //好感度 wchar_t g_talkbuf[256]; //会話バッファ #define SCLINEMAX 100//シナリオの桁数 #define SCLINELEN 256//シナリオ1行の文字数 wchar_t g_scenario[SCLINEMAX][SCLINELEN]; int g_screadlines = 0; //読み込んだ行数 int freetalkcnt; int end=0; //関数プロトタイプ宣言 void DrawScreen(); void AnalyzeTalk(); int main() { gp_backimage = g_backimage; srand((unsigned int)time(NULL)); //乱数の種を設定 //ワイド文字変換用のロケール設定 setlocale(LC_ALL, "japanese"); //ファイル読み込み FILE *fp; if (fopen_s(&fp, "scenario.txt", "r") != 0) { printf("ファイル読み込みエラー\n"); return -1; } while (fgetws(g_scenario[g_screadlines], SCLINELEN, fp) != NULL) { int len = wcslen(g_scenario[g_screadlines]); g_scenario[g_screadlines][len - 1] = L'\0'; //改行削除 wprintf(L"%s\n", g_scenario[g_screadlines]);//確認 g_screadlines++; } fclose(fp); gcls(); gfront(); DrawScreen(); //名前入力 glocate(0, 14); wchar_t ans; do { gwprintf(L"\nあなたの名前を入力してください"); ggetws(g_name, 80); //名前の長さチェック int len = wcslen(g_name); if (len == 0) wcscpy_s(g_name, 80, L"さとし"); gwprintf(L"\n名前は%sで合っていますか?(y/n)", g_name); ans = ggetwchar(); } while (ans != L'y' && ans != L'y'); //シナリオ解析 for (int curline = 0; curline < g_screadlines; curline++) { if (g_scenario[curline][0] != L'#') { //通常のセリフ gcolor(255, 80, 80); gwprintf(L"%s\n", g_scenario[curline]); ggetwchar(); //待機 } else { //コマンド if (wcsstr(g_scenario[curline], L"#back") != NULL) { //背景変更 //ファイルパスをg_imagebufへコピー unsigned int num; wcstombs_s(&num, g_imagebuf, 256, &g_scenario[curline][6], 255); gp_backimage = g_imagebuf; DrawScreen(); } else if (wcsstr(g_scenario[curline], L"#free") != NULL) { //フリートーク swscanf_s(g_scenario[curline], L"#free %d", &freetalkcnt); //会話 gcls(); DrawScreen(); glocate(0, 15); gcolor(255, 80, 80); gwprintf(L"%s君。お話しようよ\n", g_name); for (int i = 0; i < freetalkcnt; i++) { gcolor(0, 0, 200); ggetws(g_talkbuf, 256); gwprintf(L"\n"); gcolor(255, 80, 80); AnalyzeTalk(); } } } } int level = 1; if (g_loverate <= 25) level = 0; else if (g_loverate >= 75) level = 2; end = 1; gp_backimage = g_endimage[level]; DrawScreen(); return; } //画面表示 void DrawScreen() { gimage(gp_backimage, 0, 24); if (end == 0) { //好感度によって表情を変える int level = 1; if (g_loverate <= 25) level = 0; else if (g_loverate >= 75) level = 2; gimage(g_faceimage[level], 160, 64); } } //AnalyzeTalkで使用するキーワードのグローバル変数 wchar_t g_goodkeyword[][128]= { L"ケーキ", L"ショッピング", L"花束",L"ぬいぐるみ",L"ゲーム",L"RPG" }; wchar_t g_badkeyword[][128] = { L"毛虫", L"蛇", L"カエル", L"わりかん",L"海",L"帰る",L"ギャルゲー" }; //ランダムキーワード wchar_t g_randomtalk1[][128] = { L"なにかしゃべってよ", L"無口だね", L"無視しないで", L"おなかすいた" }; wchar_t g_randomtalk2[][128] = { L"ふ~ん",L"そうだね",L"びみょー", L"気持ちはわかるよ",L"話そらさないでよ", }; //会話解析 void AnalyzeTalk() { //セリフが入力されていないときの反応 if (wcslen(g_talkbuf) == 0) { int rt1num = sizeof(g_randomtalk1) / sizeof(wchar_t[128]); gwprintf(L"%s\n", g_randomtalk1[rand() % rt1num]); return; } int gknum = sizeof(g_goodkeyword) / sizeof(wchar_t[128]); int bknum = sizeof(g_badkeyword) / sizeof(wchar_t[128]); int goodfeeling = 0, badfeeling = 0; //良いキーワードを検索 for (int i = 0; i < gknum; i++) { if (wcsstr(g_talkbuf, &g_goodkeyword[i][0]) != NULL) { goodfeeling += 10; gwprintf(L"%sいいよね\n", &g_goodkeyword[i][0]); if (i == 4) { gwprintf(L"どんなゲームが好きなの?\n"); } if (i == 5) { goodfeeling += 20; gwprintf(L"私も大好き"); } } } //悪いワードを検索 for (int i = 0; i < bknum; i++) { if (wcsstr(g_talkbuf, &g_badkeyword[i][0]) != NULL) { badfeeling += 10; if (i == 5) { badfeeling += 100; gwprintf(L"もういい、さようなら\n"); //特定のワードでこのセリフを表示 } else { gwprintf(L"%sキライ\n", &g_badkeyword[i][0]); } if (i == 6) { badfeeling += 30; gwprintf(L"%s君って・・そういう趣味があったんだ\n", g_name); //特定のワードでこのセリフを表示 } } } //キーワード一致なし if(goodfeeling == 0 && badfeeling == 0) { int rt2num = sizeof(g_randomtalk2) / sizeof(wchar_t[128]); if (end = 0) { gwprintf(L"%s\n", g_randomtalk2[rand() % rt2num]); } } //現在のレベル int oldlevel = 1, newlevel = 1; if (g_loverate <= 25) oldlevel = 0; else if (g_loverate >= 75) oldlevel = 2; //変化を好感度に反映 g_loverate += goodfeeling - badfeeling; //新しいレベル if (g_loverate <= 25) newlevel = 0; else if (g_loverate >= 75) newlevel = 2; if (oldlevel != newlevel) { DrawScreen(); } }![イメージ説明](9ed47be23b87b2651666d940d39a7caf.png)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/04/05 06:29

コードが読みづらいので、質問を編集し<code>ボタン、出てくる’’’の枠の中にコードを貼り付けてください
yoshiteru21

2019/04/05 07:07

大変失礼しました。質問内容変更いたしました
guest

回答1

0

ベストアンサー

その「グラフィカルコンソール」というのは, 特定の書籍のライブラリではありませんか?
もしそうでしたら, その仕様をご確認頂いて, 適切なクリア関数を適切なタイミングで使えばよいのではないでしょうか.

投稿2019/04/05 12:02

jimbe

総合スコア12646

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問