C++或者C可以写游戏脚本吗?

Python032

C++或者C可以写游戏脚本吗?,第1张

可以,但C++和C语言是易学难精的语言,编写脚本很容易出现bug和其他问题,但他的灵活性和简易性也不可忽略,而目前比较流行的脚本:Python、Lua、ruby和Erlang,具体可以看看这篇文章http://wenku.baidu.com/link?url=sQUU5_rphUIoAHXLKV2OplLJIhD3okQkg7QMSqO2tSEJFV3F20SFd_H8S6Ql9uuF78YHf4Kj9TKgdJFdDa2AH2gmwLXUAWx9hmAcnQug0sy

生命游戏

/* ------------------------------------------------------ */

/* PROGRAM game of life :*/

/*This is a finite implementation of John H. Conway's */

/* Game of Life. Refere to my book for detail please.*/

/**/

/* Copyright Ching-Kuang Shene July/25/1989 */

/* ------------------------------------------------------ */

#include <stdio.h>

#include <stdlib.h>

#define MAXSIZE 50 /* board size */

#define OCCUPIED 1 /* occupied flag*/

#define UNOCCUPIED0

#define YES 1

#define NO0

char cell[MAXSIZE][MAXSIZE] /* the board */

char workcopy[MAXSIZE][MAXSIZE] /* a working copy */

int row /* No. of rows you want */

int column/* no. of columns you want */

int generations /* maximum no. of generation*/

/* ------------------------------------------------------ */

/* FUNCTION read_in :*/

/*This function reads in the number of generations, */

/* the number of rows, the number of columns and finally */

/* the initial configuration (the generation 0). Then put*/

/* your configuration to the center of the board. */

/* ------------------------------------------------------ */

void read_in(void)

{

int max_row, max_col /* max # of row and col.*/

int col_gap, row_gap /* incremnet of row and col */

int i, j

char line[100]

gets(line) /* read in gens, row and col*/

sscanf(line, "%d%d%d", &generations, &row, &column)

for (i = 0i <rowi++)/* clear the board */

for (j = 0j <columnj++)

cell[i][j] = UNOCCUPIED

max_col = 0/* read in the config. */

for (max_row = 0gets(line) != NULLmax_row++) {

for (i = 0line[i] != '\0'i++)

if (line[i] != ' ')

cell[max_row][i] = OCCUPIED

max_col = (max_col <i) ? i : max_col

}

row_gap = (row - max_row)/2 /* the moving gap*/

col_gap = (column - max_col)/2

for (i = max_row + row_gap - 1i >= row_gapi--) {

for (j = max_col + col_gap - 1j >= col_gapj--)

cell[i][j] = cell[i-row_gap][j-col_gap]

for ( j >= 0j--)

cell[i][j] = UNOCCUPIED

}

for ( i >= 0i--)

for (j = 0j <columnj++)

cell[i][j] = UNOCCUPIED

}

/* ------------------------------------------------------ */

/* FUNCTION display :*/

/*Display the board. */

/* ------------------------------------------------------ */

#define DRAW_BOARDER(n) { int i \

printf("\n+") \

for (i = 0i <ni++) \

printf("-")\

printf("+") \

}

void display(int gen_no)

{

int i, j

if (gen_no == 0)

printf("\n\nInitial Generation :\n")

else

printf("\n\nGeneration %d :\n", gen_no)

DRAW_BOARDER(column)

for (i = 0i <rowi++) {

printf("\n|")

for (j = 0j <columnj++)

printf("%c", (cell[i][j] == OCCUPIED) ? '*' : ' ')

printf("|")

}

DRAW_BOARDER(column)

}

/* ------------------------------------------------------ */

/* FUNCTION game_of_life : */

/*This is the main function of Game of Life. */

/* ------------------------------------------------------ */

void game_of_life(void)

{

int stable/* stable flag */

int iter /* iteration count */

int top, bottom, left, right/* neighborhood bound */

int neighbors /* # of neighbors */

int cell_count/* # of cells count */

int done

int i, j, p, q

display(0) /* display initial config. */

done = NO

for (iter = 1iter <= generations &&!doneiter++) {

memmove(workcopy, cell, MAXSIZE*MAXSIZE)/*copy*/

stable = YES /* assume it is in stable */

cell_count = 0/* # of survived cells = 0 */

for (i = 0i <rowi++) { /* scan each cell...*/

top= (i == 0) ? 0 : i - 1

bottom = (i == row - 1) ? row-1 : i + 1

for (j = 0j <columnj++) {

left = (j == 0) ? 0 : j - 1

right = (j == column - 1) ? column-1 : j + 1

/* compute number of neighbors*/

neighbors = 0

for (p = topp <= bottomp++)

for (q = leftq <= rightq++)

neighbors += workcopy[p][q]

neighbors -= workcopy[i][j]

/* determine life or dead */

if (workcopy[i][j] == OCCUPIED)

if (neighbors == 2 || neighbors == 3) {

cell[i][j] = OCCUPIED

cell_count++

}

else

cell[i][j] = UNOCCUPIED

else if (neighbors == 3) {

cell[i][j] = OCCUPIED

cell_count++

}

else

cell[i][j] = UNOCCUPIED

stable = stable &&(workcopy[i][j] == cell[i][j])

}

}

if (cell_count == 0) {

printf("\n\nAll cells die out.")

done = YES

}

else if (stable) {

printf("\n\nSystem enters a stable state.")

done = YES

}

else

display(iter)

}

}

/* ------------------------------------------------------ */

void main(void)

{

read_in()

game_of_life()

}

"扫雷"小游戏C代码

#include<stdio.h>

#include<math.h>

#include<time.h>

#include<stdlib.h>

main( )

{char a[102][102],b[102][102],c[102][102],w

int i,j /*循环变量*/

int x,y,z[999] /*雷的位置*/

int t,s /*标记*/

int m,n,lei /*计数*/

int u,v /*输入*/

int hang,lie,ge,mo /*自定义变量*/

srand((int)time(NULL)) /*启动随机数发生器*/

leb1:  /*选择模式*/

printf("\n   请选择模式:\n   1.标准  2.自定义\n")

scanf("%d",&mo)

if(mo==2)  /*若选择自定义模式,要输入三个参数*/

{do

{t=0printf("请输入\n行数 列数 雷的个数\n")

scanf("%d%d%d",&hang,&lie,&ge)

if(hang<2){printf("行数太少\n")t=1}

if(hang>100){printf("行数太多\n")t=1}

if(lie<2){printf("列数太少\n")t=1}

if(lie>100){printf("列数太多\n")t=1}

if(ge<1){printf("至少要有一个雷\n")t=1}

if(ge>=(hang*lie)){printf("雷太多了\n")t=1}

}while(t==1)

}

else{hang=10,lie=10,ge=10}  /*否则就是选择了标准模式(默认参数)*/

for(i=1i<=gei=i+1)  /*确定雷的位置*/

{do

{t=0z[i]=rand( )%(hang*lie)

for(j=1j<ij=j+1){if(z[i]==z[j]) t=1}

}while(t==1)

}

for(i=0i<=hang+1i=i+1)  /*初始化a,b,c*/

{for(j=0j<=lie+1j=j+1) {a[i][j]='1'b[i][j]='1'c[i][j]='0'} }

for(i=1i<=hangi=i+1)

{for(j=1j<=liej=j+1) {a[i][j]='+'} }

for(i=1i<=gei=i+1)  /*把雷放入c*/

{x=z[i]/lie+1y=z[i]%lie+1c[x][y]='#'}

for(i=1i<=hangi=i+1)  /*计算b中数字*/

{for(j=1j<=liej=j+1)

{m=48

if(c[i-1][j-1]=='#')m=m+1if(c[i][j-1]=='#')m=m+1

if(c[i-1][j]=='#')m=m+1 if(c[i+1][j+1]=='#')m=m+1

if(c[i][j+1]=='#')m=m+1 if(c[i+1][j]=='#')m=m+1

if(c[i+1][j-1]=='#')m=m+1if(c[i-1][j+1]=='#')m=m+1

b[i][j]=m

}

}

for(i=1i<=gei=i+1)  /*把雷放入b中*/

{x=z[i]/lie+1y=z[i]%lie+1b[x][y]='#'}

lei=ge /*以下是游戏设计*/

do

{leb2:  /*输出*/

system("cls")printf("\n\n\n\n")

printf("    ")

for(i=1i<=liei=i+1)

{w=(i-1)/10+48printf("%c",w)

w=(i-1)%10+48printf("%c  ",w)

}

printf("\n   |")

for(i=1i<=liei=i+1){printf("---|")}

printf("\n")

for(i=1i<=hangi=i+1)

{w=(i-1)/10+48printf("%c",w)

w=(i-1)%10+48printf("%c |",w)

for(j=1j<=liej=j+1)

{if(a[i][j]=='0')printf("   |")

else printf(" %c |",a[i][j])

}

if(i==2)printf(" 剩余雷个数")

if(i==3)printf(" %d",lei)

printf("\n   |")

for(j=1j<=liej=j+1){printf("---|")}

printf("\n")

}

scanf("%d%c%d",&u,&w,&v) /*输入*/

u=u+1,v=v+1

if(w!='#'&&a[u][v]=='@')

goto leb2

if(w=='#')

{if(a[u][v]=='+'){a[u][v]='@'lei=lei-1}

else if(a[u][v]=='@'){a[u][v]='?'lei=lei+1}

else if(a[u][v]=='?'){a[u][v]='+'}

goto leb2

}

a[u][v]=b[u][v]

leb3:  /*打开0区*/

t=0

if(a[u][v]=='0')

{for(i=1i<=hangi=i+1)

{for(j=1j<=liej=j+1)

{s=0

if(a[i-1][j-1]=='0')s=1if(a[i-1][j+1]=='0')s=1

if(a[i-1][j]=='0')s=1 if(a[i+1][j-1]=='0')s=1

if(a[i+1][j+1]=='0')s=1if(a[i+1][j]=='0')s=1

if(a[i][j-1]=='0')s=1 if(a[i][j+1]=='0')s=1

if(s==1)a[i][j]=b[i][j]

}

}

for(i=1i<=hangi=i+1)

{for(j=liej>=1j=j-1)

{s=0

if(a[i-1][j-1]=='0')s=1if(a[i-1][j+1]=='0')s=1

if(a[i-1][j]=='0')s=1 if(a[i+1][j-1]=='0')s=1

if(a[i+1][j+1]=='0')s=1if(a[i+1][j]=='0')s=1

if(a[i][j-1]=='0')s=1   if(a[i][j+1]=='0')s=1

if(s==1)a[i][j]=b[i][j]

}

}

for(i=hangi>=1i=i-1)

{for(j=1j<=liej=j+1)

{s=0

if(a[i-1][j-1]=='0')s=1if(a[i-1][j+1]=='0')s=1

if(a[i-1][j]=='0')s=1 if(a[i+1][j-1]=='0')s=1

if(a[i+1][j+1]=='0')s=1if(a[i+1][j]=='0')s=1

if(a[i][j-1]=='0')s=1 if(a[i][j+1]=='0')s=1

if(s==1)a[i][j]=b[i][j]

}

}

for(i=hangi>=1i=i-1)

{for(j=liej>=1j=j-1)

{s=0

if(a[i-1][j-1]=='0')s=1if(a[i-1][j+1]=='0')s=1

if(a[i-1][j]=='0')s=1 if(a[i+1][j-1]=='0')s=1

if(a[i+1][j+1]=='0')s=1if(a[i+1][j]=='0')s=1

if(a[i][j-1]=='0')s=1  if(a[i][j+1]=='0')s=1

if(s==1)a[i][j]=b[i][j]

}

}

for(i=1i<=hangi=i+1)  /*检测0区*/

{for(j=1j<=liej=j+1)

{if(a[i][j]=='0')

{if(a[i-1][j-1]=='+'||a[i-1][j-1]=='@'||a[i-1][j-1]=='?')t=1

if(a[i-1][j+1]=='+'||a[i-1][j+1]=='@'||a[i-1][j+1]=='?')t=1

if(a[i+1][j-1]=='+'||a[i+1][j-1]=='@'||a[i+1][j-1]=='?')t=1

if(a[i+1][j+1]=='+'||a[i+1][j+1]=='@'||a[i+1][j+1]=='?')t=1

if(a[i+1][j]=='+'||a[i+1][j]=='@'||a[i+1][j]=='?')t=1

if(a[i][j+1]=='+'||a[i][j+1]=='@'||a[i][j+1]=='?')t=1

if(a[i][j-1]=='+'||a[i][j-1]=='@'||a[i][j-1]=='?')t=1

if(a[i-1][j]=='+'||a[i-1][j]=='@'||a[i-1][j]=='?')t=1

}

}

}

if(t==1)goto leb3

}

n=0 /*检查结束*/

for(i=1i<=hangi=i+1)

{for(j=1j<=liej=j+1)

{if(a[i][j]!='+'&&a[i][j]!='@'&&a[i][j]!='?')n=n+1}

}

}

while(a[u][v]!='#'&&n!=(hang*lie-ge))

for(i=1i<=gei=i+1)  /*游戏结束*/

{x=z[i]/lie+1y=z[i]%lie+1a[x][y]='#'}

printf("    ")

for(i=1i<=liei=i+1)

{w=(i-1)/10+48printf("%c",w)

w=(i-1)%10+48printf("%c  ",w)

}

printf("\n   |")

for(i=1i<=liei=i+1){printf("---|")}

printf("\n")

for(i=1i<=hangi=i+1)

{w=(i-1)/10+48printf("%c",w)

w=(i-1)%10+48printf("%c |",w)

for(j=1j<=liej=j+1)

{if(a[i][j]=='0')printf(" |")

else  printf(" %c |",a[i][j])

}

if(i==2)printf(" 剩余雷个数")

if(i==3)printf(" %d",lei)printf("\n   |")

for(j=1j<=liej=j+1) {printf("---|")}

printf("\n")

}

if(n==(hang*lie-ge)) printf("你成功了!\n")

else printf("    游戏结束!\n")

printf("    重玩请输入1\n")

t=0

scanf("%d",&t)

if(t==1)goto leb1

}

/*注:在DEV c++上运行通过。行号和列号都从0开始,比如要确定第0行第9列不是“雷”,就在0和9中间加入一个字母,可以输入【0a9】三个字符再按回车键。3行7列不是雷,则输入【3a7】回车;第8行第5列是雷,就输入【8#5】回车,9行0列是雷则输入【9#0】并回车*/