怎样用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语言编程制作一个简易计算器?
1、打开CodeBlocks,新建一个空白文件,先定义头文件和主函数,接着写程序多大的主体:2、首先定义所需要的变量,将变量定义为浮点型,定义输入函数,将刚才的x和y定义为计算的变量,将c定义为选择计算方式的变量。用switch语句,将c作为选择变量,填写计算方式的选项,最后在主函数中输入一个输出函数来...
用C语言怎么做?
想要编写软件首先得要有编写工具,对于初学者来说,一个好的编写工具会能让我们更快的上手,所以编写软件最好是中文版的,我这里使用的是Visual C++ 6.0(完整绿色版)软件,当然也可以用其他版本,只是内容大同小异。首先要在网上下载软件。查看剩余1张图 2\/6 软件安装后(安装过程就不多加赘述了)...
用C语言制作一个简单实用菜单的程序。
getchar(); }void menu() \/\/主菜单{ system("cls"); \/\/清屏 printf("\\n\\t\\t\\t 菜单\\n"); printf("\\t\\t\\t#***#\\n"); printf("\\t\\t\\t# 1选择排序 #\\n"); printf("\\t\\t\\t# 2二分查找 #\\n"); printf("\\t\\t\\t# 3返回 #\\n")...
用C语言编写一个小作品,不用很复杂,但必须是原创,考试作业,谢谢_百度...
printf("\\t编号\\t姓名\\t性别\\t数学\\t英语\\tC语言\\t平均值\\n"); printf("\\t%d\\t%s\\t%s\\t%.2f\\t%.2f\\t%.2f\\t%.2f\\n",stu[i].number,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave); if(stu[i].score1<60) printf("%s的数学成绩应准备补考...
我想用C语言开发一个小项目
很小的游戏,你可以试试猫捉老鼠,请尽量使用图片进行制作。猫捉老鼠的难度还是挺简单的,你可以试试对你生活中有帮助的,例如解方程,解应用题。我现在正在开发一个游戏,类似于打砖块,但有四个板都能动,就像SHATTER一样。但还是得看自己的爱好,你喜欢什么就做什么。如果LZ不嫌弃的话,就点一下...
教你如何使用C语言编写简单小游戏
1,在return语句的前面加一句:getch ();,表示按任意键结束.2,在printf语句前用clrscr函数清屏,要使用这个函数和getch函数,需要在程序开头再包含头文件conio.h.3,ASCII码也有 许多非常好玩的字符,比如ASCII码值为2的就是一个笑脸,我们可 以用printf("%c", 2)来输出一个笑脸. 现在我们把Hello,world...
用C语言编一个成绩记录簿
成绩记录簿编制一个C语言成绩记录簿,每个学生信息包括:学号、姓名、C语言成绩。具体功能:(1)创建信息链表并以磁盘文件保存;(2)读取磁盘文件并显示输出所有学生的成绩;(3)按... 成绩记录簿 编制一个C语言成绩记录簿,每个学生信息包括:学号、姓名、C语言成绩。具体功能: (1)创建信息链表并以磁盘文件保存; (2)...
如何用C\/C++开发一个web应用(Windows)?
可以使用qt for python+qwebview+pyinstaller打包单个exe,启动慢。 或者制作一个安装包,使用 fbs 或 pynsist 缺点:生成后包会稍大,第一次执行速度会有点感人。热爱 Rust 并使用 Rust 语言Windows T 也可以用 Rust 语言开发。Electron 跨平台,界面美观Electron 是一个跨平台的桌面应用开发框架,让...
用c语言编写一个根据游戏规则输出判断结果
刚制作了一个猜拳的游戏,vc++6.0做的,你试试 include<stdio.h> include<stdlib.h> include void main(){int a,b,c,d,e,f=0,g=0,h=0,num=0;float i,j,k=0;int caiquan1(int x);int caiquan2(int x);int shengfu1(int x,int y);int shengfu2(int x,int y);srand((in...
C语言一般是用来制作什么的?如何制作应用程序?
C语言对操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它高级语言,许多大型应用软件都是用C语言编写的。C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画它是数值计算的高级语言。编写一个程序,首先要定义好程序有什么作用...
后通奥得: 比如 "贪吃蛇" ”俄罗斯方块“ ”飞行器“ 这类控制台的游戏,虽然无趣,但是如果你想做一些看起来很炫很艳丽的2,3类游戏,相信我,你控制台这关,最好是认真做完. 这类游戏,你可以去图书馆借一本 ”C语言课程设计” 这本书真的认认真真学完,敲出每一行代码,你的面向过程编程能力,基本可以放心了. 有什么代码细节搞不定,上 CSDN, 博客园,overflow 去问,去发帖问.
铁岭县17296129538: 用C++做一个简单的小游戏,最好有消灭星星的,很急啊!!!! - ?
后通奥得: #include<iostream> #include<windows.h> #include<time.h> #include<conio.h> using namespace std; // 刷新当前屏幕 inline void Refresh(char q[][22], int grade, int gamespeed){system("cls"); // 清屏int i,j;cout << endl;for(i=0;i<22;i++){...
铁岭县17296129538: 如何用C++写小游戏 - ?
后通奥得: 你可以看看SDL2.0这个图形库 游戏主要的步骤就是update和draw,SDL通过计时器可以实现这两个步骤
铁岭县17296129538: 怎么编一个c++小游戏 - ?
后通奥得: #include "stdafx.h" #include <boost\lexical_cast.hpp> #include<stdlib.h> #include<string.h> #include <iostream> #include <map> #include<iterator> #include<vector> #include<algorithm> #include<set> #include<map> #include <cstring> #...
铁岭县17296129538: 求用C++编写一个猜数字游戏..很急 - ?
后通奥得: #include #include int main() { char ch; int i,a; printf("猜数字游戏\n\n"); srand(time(NULL)); //随机数发生器的初始化函数 i=rand()%10; //伪随机数发生器 if(i%2==0)printf("这个数是偶数\n");//判断奇数偶数 else printf("这个数是奇数\n...
铁岭县17296129538: 怎样用c++编一个简单的贪吃蛇游戏 - ?
后通奥得: #include<graphics.h> #include<stdlib.h> #include<dos.h> #define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800 #define ESC 0x011b int i,key; int score=0; int gamespeed=32000; struct Food /*食物的结构体*/ { ...
铁岭县17296129538: 怎么用C语言做一个带动画效果带声音的的小游戏呢,需要学什么其他的 - ?
后通奥得: C++是一种编程语言,语言是最基础的.搞应用开发时,就要掌握相关方面的编程知识,比如做一个windows系统上的游戏,第一需要掌握windows编程,然后,游戏需要显示图像,这就需要掌握图像编程如OpenGL或DirectX.windowsGDI是操作系统图形界面的接口,一般不会用于做游戏.再者,游戏要有声音,通常使用DirectX的接口,或者使用其它声音工具包如OpenALBassOGG等.DirectX是专门为制作多媒体程序尤其是游戏而提供的硬件加速接口,也可以使用商业或非商业的游戏引擎来制作.建议使用VisualC++掌握Windows编程.
铁岭县17296129538: 用C++如何编写一个小游戏 - ?
后通奥得: 选一个GUI 库就可以了 ,
铁岭县17296129538: 如何用C++编写小游戏 - ?
后通奥得: VC6的话你就用MFC好了 如果对Win32的API足够了解,那直接用Win32的工程也可以 不过在VC6里面自带的GDI库对图形这块支持不怎么样.最好还是去下GDI+的库或者干脆用directx或openGL
铁岭县17296129538: 怎么样用vc++6.0编写小游戏??
后通奥得: 文件->新建->工程选项卡->win32 console application->输入工程名和保存路径->确定->完成->确定 然后再 文件->新建->文件选项卡->C++ source file->输入文件名->确定 这样就可以编译了