怎样用C++制作一个有趣的简单游戏
你这问题略宽泛啊···
首先,你js基础得有。
其次,知道游戏循环怎么回事。
再来就是你的游戏逻辑了。
分享一个大家小时候常玩的小游戏。希望能够喜欢。
这游戏老外管它叫 Bulls And Cows(Bulls 是 A,Cows 是 B)。
用 C++ 可以这样写:
#include <iostream>
#include <string>
#include <sstream>
#include <set>
#include <cstdlib>
#include <ctime>
using namespace std;
// Returns bulls and cows scored by guess on secretNumber.
string bullsAndCows( unsigned guess, unsigned secretNumber ) {
stringstream ssGuess,
ssSecretNumber;
ssGuess << guess;
ssSecretNumber << secretNumber;
string strGuess( ssGuess.str( ) ),
strSecretNumber( ssSecretNumber.str( ) );
unsigned bulls = 0,
cows = 0,
i;
for ( i = 0; i < strSecretNumber.length( ); ++i ) // count bulls
if ( strSecretNumber[ i ] == strGuess[ i ] ) {
++bulls;
strGuess.erase( i, 1 ); // erase to ease
strSecretNumber.erase( i, 1 ); // counting of cows
--i;
}
for ( i = 0; i < strSecretNumber.length( ); ++i ) // count cows
if ( strGuess.find( strSecretNumber[ i ] ) != string::npos ) {
++cows;
strGuess.erase( strGuess.find( strSecretNumber[ i ] ), 1 );
strSecretNumber.erase( i, 1 );
--i;
}
return string( 1, '0' + bulls ) + string( 1, '0' + cows );
}
// Returns true iff n is positive, 4-digit, contains no 0 or repeated digit.
bool isValidInput( int n ) {
stringstream ss;
ss << n;
string s = ss.str( );
return 1000 <= n && n <= 9999 &&
s.find( '0' ) == string::npos &&
set<char>( s.begin( ), s.end( ) ).size( ) == 4;
}
void main( ) {
// select a valid random secret number
srand( time( NULL ) );
unsigned secretNumber = 0;
while ( ! isValidInput( secretNumber ) )
secretNumber = rand( );
for ( unsigned guess = 0, guessCount = 1; guess != secretNumber; ++guessCount ) {
cout << "Your guess (#" << guessCount << "): ";
string input;
cin >> input;
if ( input.length( ) != 4 ||
! ( stringstream( input ) >> guess ) ||
! isValidInput( guess ) ) {
cout << "\n\tError: Input must be a positive 4-digit number without "
"0 or repeated digit.\n\n";
--guessCount;
continue;
}
string bullsCows = bullsAndCows( guess, secretNumber );
cout << "\tA: " << bullsCows[ 0 ] << ", B: " << bullsCows[ 1 ] << "\n";
}
cout << "\n\tYou've got it!\n\n";
}
复杂点的,五子棋:
#include "stdafx.h"
#include <stdio.h>
#include <math.h>
//�办跑计��
HINSTANCE hInst;
HBITMAP chess[2];
HDC hdc,mdc,bufdc;
HWND hWnd;
DWORD tPre,tNow;
int board[10][10];
bool ptab[10][10][192];
bool ctab[10][10][192];
int win[2][192];
int num[2];
bool turn,over;
int winner;
//ㄧΑ��
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
void MyPaint(HDC hdc);
void InitGame();
void ComTurn();
//****�祘Α**************************************
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
MyRegisterClass(hInstance);
//磅《�﹍てㄧΑ
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
//笴栏癹伴
while( msg.message!=WM_QUIT )
{
if( PeekMessage( &msg, NULL, 0,0 ,PM_REMOVE) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else
{
tNow = GetTickCount();
if(tNow-tPre >= 100)
MyPaint(hdc);
}
}
return msg.wParam;
}
//****)竡の爹�跌怠摸�ㄧΑ*************************
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = NULL;
wcex.hCursor = NULL;
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = "canvas";
wcex.hIconSm = NULL;
return RegisterClassEx(&wcex);
}
//****�﹍ㄧΑ*************************************
// 囱弦�钡�の㊣� InitGame() ㄧΑ秨﹍囱Ы
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HBITMAP tile,bmp;
int rowNum,colNum;
int i,x,y;
hInst = hInstance;
hWnd = CreateWindow("canvas", "酶瓜跌怠" , WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
MoveWindow(hWnd,10,10,480,520,true);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
hdc = GetDC(hWnd);
mdc = CreateCompatibleDC(hdc);
bufdc = CreateCompatibleDC(hdc);
bmp = CreateCompatibleBitmap(hdc,450,450);
SelectObject(mdc,bmp);
tile = (HBITMAP)LoadImage(NULL,"tile.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
chess[0] = (HBITMAP)LoadImage(NULL,"chess0.bmp",IMAGE_BITMAP,38,38,LR_LOADFROMFILE);
chess[1] = (HBITMAP)LoadImage(NULL,"chess1.bmp",IMAGE_BITMAP,38,38,LR_LOADFROMFILE);
for (i=0;i<100;i++)
{
rowNum = i / 10;
colNum = i % 10;
x = colNum * 45;
y = rowNum * 45;
SelectObject(bufdc,tile);
BitBlt(mdc,x,y,45,45,bufdc,0,0,SRCCOPY);
}
InitGame();
MyPaint(hdc);
return TRUE;
}
//****囱Ы�﹍ㄧΑ***********************************
// 1.砞)囱弦�﹍�篈の莉秤�ず甧
// 2.∕)�����よ
void InitGame()
{
int i,j,k;
int count=0;
over = false;
num[0] = num[1] = 0;
//砞)�产籔筿福���莉秤舱�い�囱�计
for(i=0;i<192;i++)
{
win[0][i] = 0;
win[1][i] = 0;
}
//�﹍て囱弦�篈
for(i=0;i<10;i++)
for(j=0;j<10;j++)
board[i][j] = 2;
//砞)�キよ��莉秤舱�
for(i=0;i<10;i++)
for(j=0;j<6;j++)
{
for(k=0;k<5;k++)
{
ptab[i][j+k][count] = true;
ctab[i][j+k][count] = true;
}
count++;
}
//砞)��よ��莉秤舱�
for(i=0;i<10;i++)
for(j=0;j<6;j++)
{
for(k=0;k<5;k++)
{
ptab[j+k][i][count] = true;
ctab[j+k][i][count] = true;
}
count++;
}
//砞)タ癸à絬よ��莉秤舱�
for(i=0;i<6;i++)
for(j=0;j<6;j++)
{
for(k=0;k<5;k++)
{
ptab[j+k][i+k][count] = true;
ctab[j+k][i+k][count] = true;
}
count++;
}
//砞)は癸à絬よ��莉秤舱�
for(i=0;i<6;i++)
for(j=9;j>=4;j--)
{
for(k=0;k<5;k++)
{
ptab[j-k][i+k][count] = true;
ctab[j-k][i+k][count] = true;
}
count++;
}
//睹计∕)パê�よ��囱�
srand(GetTickCount());
if(rand()%2 == 0)
turn = true;
else
turn = false;
}
//****筿福��ㄧΑ***********************************
// 1.璸衡莉秤だ计
// 2.匡拒程ㄎ�竚秈《��笆�
void ComTurn()
{
int grades[2][10][10];
int m,n,i,max=0;
int u,v;
for(m=0;m<10;m++)
for(n=0;n<10;n++)
{
grades[0][m][n] = 0;
grades[1][m][n] = 0;
if(board[m][n] == 2)
{
for(i=0;i<192;i++)
{
//璸衡�产��囱���莉秤だ计
if(ptab[m][n][i] && win[0][i] != 7)
{
switch(win[0][i])
{
case 0:
grades[0][m][n]+=1;
break;
case 1:
grades[0][m][n]+=200;
break;
case 2:
grades[0][m][n]+=400;
break;
case 3:
grades[0][m][n]+=2000;
break;
case 4:
grades[0][m][n]+=10000;
break;
}
}
//璸衡筿福��囱���莉秤だ计
if(ctab[m][n][i] && win[1][i] != 7)
{
switch(win[1][i])
{
case 0:
grades[1][m][n]+=1;
break;
case 1:
grades[1][m][n]+=220;
break;
case 2:
grades[1][m][n]+=420;
break;
case 3:
grades[1][m][n]+=2100;
break;
case 4:
grades[1][m][n]+=20000;
break;
}
}
}
if(max == 0)
{
u = m;
v = n;
}
if(grades[0][m][n] > max)
{
max = grades[0][m][n];
u = m;
v = n;
}
else if(grades[0][m][n] == max)
{
if(grades[1][m][n] > grades[1][u][v])
{
u = m;
v = n;
}
}
if(grades[1][m][n] > max)
{
max = grades[1][m][n];
u = m;
v = n;
}
else if(grades[1][m][n] == max)
{
if(grades[0][m][n] > grades[0][u][v])
{
u = m;
v = n;
}
}
}
}
board[u][v] = 1; //砞)�筿福�囱�
num[1]++;
if(num[0] == 50 && num[1] == 50)
{
winner = 2; //キも
over = true;
}
else
for(i=0;i<192;i++)
{
if(ctab[u][v][i])
{
win[1][i]++;
ptab[u][v][i] = false;
win[0][i] = 7;
if(win[1][i] == 5)
{
winner = 1;
over = true;
}
}
}
turn = true; //传�产�
}
//****�璹酶瓜ㄧΑ*********************************
// 跌怠禟瓜の陪ボ瘪�
void MyPaint(HDC hdc)
{
int m,n;
char *str;
if(over)
{
switch(winner)
{
case 0:
str = "眤墓� ! �� F1 ��穝秈《笴栏..";
break;
case 1:
str = "筿福墓� ! �� F1 ��穝秈《笴栏..";
break;
case 2:
str = "ぃだ秤玺 ! �� F1 ��穝秈《笴栏..";
break;
}
TextOut(hdc,10,470,str,strlen(str));
}
else if(!turn) //筿福��
{
str = "筿福�σい... ";
TextOut(hdc,10,470,str,strlen(str));
ComTurn();
}
else
{
str = "赣眤��... ";
TextOut(hdc,10,470,str,strlen(str));
}
for(m=0;m<10;m++)
for(n=0;n<10;n++)
{
if(board[m][n] == 0) //禟��产囱�
{
SelectObject(bufdc,chess[0]);
BitBlt(mdc,m*45+3,n*45+3,38,38,bufdc,0,0,SRCCOPY);
}
else if(board[m][n] == 1) //禟�筿福囱�
{
SelectObject(bufdc,chess[1]);
BitBlt(mdc,m*45+3,n*45+3,38,38,bufdc,0,0,SRCCOPY);
}
else //禟���
{
SelectObject(bufdc,chess[1]);
BitBlt(mdc,m*45+3,n*45+3,38,38,bufdc,0,0,WHITENESS);
}
}
BitBlt(hdc,10,10,450,450,mdc,0,0,SRCCOPY);
tPre = GetTickCount();
}
//****瘪�矪瞶ㄧΑ***********************************
// 1.砞)�� F1 龄�穝秨﹍笴栏
// 2.矪瞶�产��菲公オ龄�囱��笆�
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int x,y,m,n,i;
switch (message)
{
case WM_KEYDOWN: //���龄瘪�
switch (wParam)
{
case VK_ESCAPE: //�� Esc 龄
PostQuitMessage( 0 );
break;
case VK_F1: //�� F1 龄
InitGame();
break;
}
case WM_LBUTTONDOWN: //��菲公オ龄瘪�
if(!over)
if(turn)
{
x = LOWORD(lParam); //�眔菲公 X 畒夹
y = HIWORD(lParam); //�眔菲公 Y 畒夹
if(x > 10 && x < 460 && y> 10 && y < 460)
{
m = (int)floor((x-10)/45);
n = (int)floor((y-10)/45);
if(board[m][n] == 2)
{
board[m][n] = 0; //砞)��产�囱�
num[0]++;
if(num[0] == 50 && num[1] == 50)
{
winner = 2; //キも
over = true;
}
else
for(i=0;i<192;i++)
{
if(ptab[m][n][i])
{
win[0][i]++;
ctab[m][n][i] = false;
win[1][i] = 7;
if(win[0][i] == 5)
{
winner = 0;
over = true;
}
}
}
turn = false; //传筿福�
}
}
}
break;
case WM_DESTROY: //跌怠挡�瘪�
DeleteDC(mdc);
DeleteDC(bufdc);
DeleteObject(chess[0]);
DeleteObject(chess[1]);
ReleaseDC(hWnd,hdc);
PostQuitMessage(0);
break;
default: //ㄤウ瘪�
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
使用C++,自己制作一个游戏玩!
去网上下啊.
去找找吧.
网上N多的.
C++游戏开发,超简单的入门项目,200行代码搞定开心消消乐
开发游戏并不需要高深技术,即使是初学者也能上手。本文将带你通过一个简单的C++项目,一步步了解游戏开发过程。源代码可在本文底部获取,对代码有任何建议,欢迎加入我们的学习交流群进行讨论。连连看的开发首先需要确定数据结构。游戏中的矩阵界面用二维数组表示,方便快速访问每个格子的数据,用数字标记不同...
c++游戏编程,写一个游戏编程,简单点
')<<i;cout<<endl;for(int i=1; i<Y; i++){cout<<setw(3)<<setfill(' ')<<i;for(int j=1;j<X;j++)cout<<setw(3)<<setfill(' ')<<p[i][j];cout<<endl;}}void black() \/\/黑方落子{cout<<"请黑方输入落子位置:\\n"<<"请输入落子的行数:";cin>>m;cout<<"...
用C\/C++编写小游戏:4.2 打字练习游戏
简易打字练习游戏 程序4-2介绍了一个简易打字练习游戏。游戏主要功能包括:1. 随机生成小写英文字符,从屏幕左侧开始逐渐向右移动,显示为'-'字符。2. 用户输入正确字符时,该字符停止移动,并显示'*'字符和响铃,表示用户赢了。3. 如果字符到达屏幕右侧而用户未输入正确字符,则该字符停止不动。4. ...
猜拳游戏的Visual C++ 6.0实现
猜拳游戏是一种简单有趣的游戏,通过计算机程序模拟实现,可以增加游戏的趣味性和挑战性。本文将介绍如何使用Visual C++ 6.0来实现一个猜拳游戏的基本功能。首先,我们需要包含必要的头文件,以使用所需的功能。在程序中,我们定义了一个主函数,用于控制游戏的流程。游戏开始时,用户需要输入他们想要猜的...
初学C\/C++能做什么?C++简单实现字符界面五子棋小游戏【附源码】_百度知...
本文为一大学新生分享其自学C\/C++后,利用所学知识实现的字符界面五子棋小游戏。该开发者在大一时即产生了在Windows环境下开发五子棋小游戏的想法,并在大一上学期成功实践。随着学习Linux,开发者决定将游戏移植至Linux系统中。移植过程中遇到的主要问题包括Linux环境下不支持Windows系统中的_kbhit()和_...
小游戏的C++代码
\/*一个火柴人游戏,亲自验证,可运行*\/ \/*在编译时添加如下命令:-std=c++11,否则会编译错误*\/ include <cstdio> include <cstdlib> include <Windows.h> include <thread> include <conio.h> using namespace std;const unsigned char CTRL_KEY = 0XE0;const unsigned char LEFT = 0X4B;cons...
学习C\/C++自制程序:双人击球游戏!【项目分享】
今天为大家介绍C\/C++自编程序的一个项目——双人击球游戏。这是一个深受欢迎的编程项目,适合于编程新手和经验丰富的程序员。在C\/C++自编程序中,双人击球游戏是一个经典的简单游戏,旨在通过学习和实践C\/C++编程语言来提升编程技能。通过这个项目,你可以以有趣的方式学习如何处理用户输入、控制游戏逻辑和...
用vc或c++编写的一个小游戏代码,要有源代码,
int life; \/*蛇的生命,0活着,1死亡*\/ }snake;void Init(void); \/*图形驱动*\/ void Close(void); \/*关闭游戏函数*\/ void DrawK(void); \/*画图函数*\/ void GameOver(void);\/*输出失败函数*\/ void GamePlay(); \/*游戏控制函数 主要程序*\/ void PrScore(void); \/*分数输出函数*\/ DELA...
求一个30-50最简单的C++小游戏程序编辑~~急急急~~
main(){ srand(time(0));int s=rand()%100+1,n,i;for(i=0;i<7;i++){ cin>>n;if(n>s)cout<<"你猜的数太大了\\n";else if(n<s)cout<<"您猜的数太小了\\n";else { cout<<("真聪明,您猜对了!\\n");break;} } if(i==7)cout<<("很遗憾,您没有猜对\\n");} ...
...帮我写一个有图片的c++打怪小游戏吗,老师让做的课题不会呀! 希望...
cout<<"欢迎你开始玩打怪物小游戏!\\n"; cout<<"小镇\\n"; cout<<"一个1000年的小镇。周围有一条河,有一片树林,很多房子和很多人。\\n有一家药店"<<endl; cout<<"和一家武器店。\\n"; int xiaozhen;\/\/定义选择项目 cout<<"1.去武器店"<<endl; cout<<"2.去药品店"<<endl; cout<<...