通过任何按键中断循环的功能

时间:2015-08-23 23:40:07

标签: c++

我是C ++的新手。决定做我自己的游戏。我想为它制作一个起始屏幕。问题是我没有找到方法来制作一个"按任意键继续"点继续时的功能。我为程序设置循环,等待任何按下,但点不想显示。

#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <stdlib.h>
#include <windows.h>

using namespace std;


int pressCheck(){
    char c = 0;
    c = getchar();
    if (c == 0)
        return 1;
    return 0;
}

int main()
{
    cout << "\t\t\t\t  Hello" << endl;
    Sleep(300);
    cout << "\t\t     Welcome to my new game BITHCES!" << endl << endl;
    Sleep(700);
    cout << "\t\t\tPress any key to proceed";
    while(!pressCheck()){
        Sleep(300);
        cout << ".";
        Sleep(300);
        cout << ".";
        Sleep(300);
        cout << ".";
    }
    getchar();
    system("cls");
    Sleep(100);


        return 0;
}

2 个答案:

答案 0 :(得分:1)

如果您要创建基于文本的游戏,我建议您使用ncurses(或Windows的pdcurses):

  

[...]用于开发&#34;类似GUI的工具包&#34;运行的应用程序软件   在终端模拟器下。

实现上面的内容就像是

#include <string>
#include <ncurses.h>        // This header might be different on windows
#include <unistd.h>         // for usleep, replace with Windows.h (?)

void DisplayCentre(int yy, const std::string& str)
{
  // Get the screen size
  int y, x;
  getmaxyx(stdscr, y, x);

  // Compute starting location for string (centre)
  x = (x - str.size())/2;

  // Write the string to the window
  mvwprintw(stdscr, yy, x, str.c_str());

  // Make sure the screen is updated
  refresh();
}

void PromptForKey(void)
{
  // Get the screen size
  int y, x;
  getmaxyx(stdscr, y, x);

  // Write a message at the bottom left of the screen
  mvwprintw(stdscr, y-1, 0, "Press any key to continue");

  // Set a time-out for wgetch
  wtimeout(stdscr, 300);

  // While the user hasn't entered a character
  while (wgetch(stdscr) == ERR)
  {
    // Add another dot to the screen
    waddch(stdscr, '.');
    refresh();
  }

  // Clear time-out
  notimeout(stdscr, true);
}

int main(int argc, char** argv)
{
  initscr();           // Initialize curses
  cbreak();            // Make typed characters immediately available
  noecho();            // Don't automatically print typed characters
  curs_set(0);         // Make the cursor invisible (where supported)

  // Display `Hello' (at line 10)
  DisplayCentre(10, "Hello");

  // Delay (you might want to use Sleep())
  sleep(1);

  // Display `Welcome to my new game' (at line 15)
  DisplayCentre(15, "Welcome to my new game");
  sleep(1);

  // Prompt user for key
  PromptForKey();

  // Close down curses
  endwin();

  return 0;
}

要在Linux上编译此程序,我使用g++ test.cpp -lncurses。在Windows上,您可能需要使用Windows sleep函数替换Sleep并使用相应的标头。您可能还需要使用ncurses的替代方法。

但是,如果您只是学习编程,我建议您尝试在Python中使用ncurses。 Python具有成为解释语言的好处,因此您不必过于担心编译或链接可执行文件。 Python也大多是跨平台的。以上用Python实现:

#!/usr/bin/python

from curses import *
from time import sleep

def promptForKey(win):
  """ Ask the user to press any key to continue. """
  # Get screen size
  y,x = win.getmaxyx()

  # Display prompt
  win.addstr(y-1, 0, "Press any key to continue")
  win.refresh()

  # Set time-out
  win.timeout(300)

  while (win.getch() == ERR):
    win.addch('.')

  # Disable time-out
  win.notimeout(True)


def dispCentre(win, yy, string, delay):
  """ Display string at line yy and wait for delay milliseconds. """
  # Get screen size
  y,x = win.getmaxyx()

  # Display string in centre
  x = (x - len(string))/2
  win.addstr(yy, x, string)
  win.refresh()

  # Delay
  sleep(delay)

if __name__ == '__main__':

  # Initialize curses
  win = initscr()
  cbreak()
  noecho()
  curs_set(0)

  # Display some stuff
  dispCentre(win, 10, "Hello", 0.3)
  dispCentre(win, 15, "Welcome to my new game", 0.7)
  promptForKey(win)

  # Close down curses
  endwin()

答案 1 :(得分:0)

我知道我迟到了,但我想也许您想这样做? (运行附带的代码)

#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <stdlib.h>
#include <windows.h>
#include<conio.h>

using namespace std;


bool pressCheck(){
    if (getch())
        return 1;
    return 0;
}

int main()
{
    cout << "\t\t\t\t  Hello" << endl;
    Sleep(300);
    cout << "\t\t     Welcome to my new game BITHCES!" << endl << endl;
    Sleep(700);
    cout << "\t\t\tPress any key to proceed";
    while(!pressCheck()){
        Sleep(300);
        cout << ".";
        Sleep(300);
        cout << ".";
        Sleep(300);
        cout << ".";
    }
    system("cls");
    Sleep(100);


    return 0;

}