- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
学生 Java 开发人员在这里寻求一些帮助,通过 C++ 程序开始使用新语言。
问题 是这段代码无法在 gcc 上编译,我完全不知道为什么。
预期行为遵循一组规则:
游戏表示为一个二维数组,其中包含随机填充的二进制单元格,每个单元格要么是活的,要么是死的。
游戏的每一“轮”,细胞根据规则子集生死。
A。如果一个单元格有 4 个或更多活着的邻居,它就会死于过度拥挤。
b.如果一个细胞有 1 个或更少的活邻居,它就会死于孤独。
C。如果一个死细胞恰好有 3 个邻居,它就会像被殖民一样复活。
为了确定邻居,棋盘的每一面都被认为与另一面相邻。因此右侧与左侧相邻,反之亦然。顶部和底部以及角落也是如此。
例如:[0][0]有8个邻居,在它上面是[n-1][n-1],[n-1][0],[n-1][1],在同一行是[0][n-1]、[0][1],下面是[1][n-1]、[1][0]、[1][1]。
运行直到电路板没有变化或用户指定的最大循环已经完成。
可能最令人困惑的元素是我选择了我认为可能的最简单的方式来表示它,通过将 N×N 数组镜像到 N+2×N+2 数组,并填充周围的“壳”具有代表内部相对邻居的“幽灵值”。
如果您能提供帮助,我们将不胜感激。我去读更多的书。
#include "Life.h"
#include <stdio.h> /* printf, scanf, puts, NULL */
#include <stdlib.h> /* rand */
#include <time.h> /* time */
#include<iostream>
#include<fstream>
using namespace std;
/*
* Main handles the first steps, collecting user input. It creates the initial board, then passes it for further manipulation.
*/
int main(){
time_t start;
time(&start);
int rows;
cout << "Please input the row number \n";
cin >> rows;
rows += 2;
int maxCycles;
cout << "Please input Maximum cycles \n";
cin >> maxCycles;
int** board = new int*[rows];
for(int i = 0; i < rows; ++i){
board[i] = new int[rows];
}
initBoard(board, rows);
playGame(board, rows, maxCycles);
time_t end;
cout << "Runtime:" << end-start << "\n";
return 0;
}
/*
* Randomizes the chance of a cell to be alive in the initial cycle. After values are initialized, passes board to set ghost values, i.e., the surrounding opposite side neighbors.
*/
void initBoard(int** board, int rows){
for(int i = 1; i < rows-1; ++i){
for(int j = 1; j < rows-1; ++j){
if(rand()%4 == 0){
board[i][j] = 1;
}else{
board[i][j] = 0;
}
}
}
setGhosts(board, rows);
}
/*
* Sets the ghost values framing the functioning game board
*/
void setGhosts(int** board, int rows){
for(int i = 1; i < rows-1; ++i){
board[0][i] = board[rows-2][i];
board[rows-1][i] = board[1][i];
board[i][0] = board[i][rows-2];
board[i][rows-1] = board[i][1];
}
//Sets corner values
board[0][0] = board[rows-2][rows-2];
board[rows-1][rows-1] = board[1][1];
board[0][rows-1] = board[rows-2][1];
board[rows-1][0] = board[1][rows-2];
}
//Runs up to maxCycles cycles of the game, with each cycle altering the value of board.
void playGame(int** board, int rows, int maxCycles){
int boolean = 1;
for(int k = 0; k < maxCycles; ++k){
//initialize temp array
int** temp = new int*[rows];
for(int i = 0; i < rows; ++i){
temp[i] = new int[rows];
}
//Begin game
for(int i = 1; i < rows-1;++i){
for(int j = 1; j < rows; ++j){
//check live neighbors
int count = neighbors(board, i, j);
if(board[i][j] == 1){//If alive, check if it stays alive
if(count < 4 || count > 1){
temp[i][j] = 1;
}else{
temp[i][j] = 0;
boolean = 0;
}
}else if(board[i][j] == 0){//If dead, check if it stays dead
if(count == 3){
temp[i][j] = 1;
boolean = 0;
}else{
temp[i][j] = 0;
}
}
}
}
setGhosts(temp, rows);
board = temp;
if(boolean == 1) break;//If there is no change in the board across a cycle, the game is over
}
printBoard(board, rows);
}
//Returns the number of living neighbors to the given cell[i][j]
int neighbors(int** board, int i, int j){
int count = 0;
if(board[i-1][j-1] == 1){ ++count;}
if(board[i-1][j] == 1){ ++count;}
if(board[i-1][j+1] == 1){ ++count;}
if(board[i][j-1] == 1){ ++count;}
if(board[i][j+1] == 1){ ++count;}
if(board[i+1][j-1] == 1){ ++count;}
if(board[i+1][j] == 1){ ++count;}
if(board[i+1][j+1] == 1){ ++count;}
return count;
}
void printBoard(int** board, int rows){
for(int i=1; i< rows-1; i++){
for(int j=1; j< rows-1; j++){
cout << board[i][j] << " ";
}
cout << endl;
}
}
最佳答案
g++ -c -Wall -ansi -O3 -std=c++11 foo.cc
foo.cc: In function 'int main()':
foo.cc:51:26: error: 'initBoard' was not declared in this scope
initBoard(board, rows);
^
foo.cc:52:36: error: 'playGame' was not declared in this scope
playGame(board, rows, maxCycles);
^
foo.cc: In function 'void initBoard(int**, int)':
foo.cc:72:26: error: 'setGhosts' was not declared in this scope
setGhosts(board, rows);
^
foo.cc: In function 'void playGame(int**, int, int)':
foo.cc:106:50: error: 'neighbors' was not declared in this scope
int count = neighbors(board, i, j);
^
foo.cc:128:27: error: 'printBoard' was not declared in this scope
printBoard(board, rows);
^
make: *** [foo.o] Error 1
您必须前向声明所有函数,以便编译器在调用它们时知道它们。这些函数相互调用的方式具有顺序依赖性。将函数的顺序更改为这样的 int main()
位于文件底部。
void setGhosts(int** board, int rows)
void initBoard(int** board, int rows)
int neighbors(int** board, int i, int j)
void printBoard(int** board, int rows)
void playGame(int** board, int rows, int maxCycles)
int main()
您还有一些不必要的包含,例如 #include "Life.h"
和 #include <stdio.h>
.其他 C 包含应使用 C++ 格式包含,即而不是 #include <stdlib.h>
应该是#include <cstdlib>
而不是 #include <math.h>
应该是#include <cmath>
.
最后,您在 int main()
的末尾遇到了问题其中 end
未初始化使用。一旦您解决了所有其他问题,您就会看到它。
关于c++ - 学习 C++ : The game of Life,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48755863/
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
介绍篇 什么是MiniApis? MiniApis的特点和优势 MiniApis的应用场景 环境搭建 系统要求 安装MiniApis 配置开发环境 基础概念 MiniApis架构概述
我正在从“JavaScript 圣经”一书中学习 javascript,但我遇到了一些困难。我试图理解这段代码: function checkIt(evt) { evt = (evt) ? e
package com.fastone.www.javademo.stringintern; /** * * String.intern()是一个Native方法, * 它的作用是:如果字
您会推荐哪些资源来学习 AppleScript。我使用具有 Objective-C 背景的传统 C/C++。 我也在寻找有关如何更好地开发和从脚本编辑器获取更快文档的技巧。示例提示是“查找要编写脚本的
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
关闭。这个问题不符合 Stack Overflow guidelines 。它目前不接受答案。 想改善这个问题吗?更新问题,以便堆栈溢出为 on-topic。 6年前关闭。 Improve this
我是塞内加尔的阿里。我今年60岁(也许这是我真正的问题-笑脸!!!)。 我正在学习Flutter和Dart。今天,我想使用给定数据模型的列表(它的名称是Mortalite,请参见下面的代码)。 我尝试
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
学习 Cappuccino 的最佳来源是什么?我从事“传统”网络开发,但我对这个新框架非常感兴趣。请注意,我对 Objective-C 毫无了解。 最佳答案 如上所述,该网站是一个好地方,但还有一些其
我正在学习如何使用 hashMap,有人可以检查我编写的这段代码并告诉我它是否正确吗?这个想法是有一个在公司工作的员工列表,我想从 hashMap 添加和删除员工。 public class Staf
我正在尝试将 jQuery 与 CoffeScript 一起使用。我按照博客中的说明操作,指示使用 $ -> 或 jQuery -> 而不是 .ready() 。我玩了一下代码,但我似乎无法理解我出错
还在学习,还有很多问题,所以这里有一些。我正在进行 javascript -> PHP 转换,并希望确保这些做法是正确的。是$dailyparams->$calories = $calories;一条
我目前正在学习 SQL,以便从我们的 Magento 数据库制作一个简单的 RFM 报告,我目前可以通过导出两个查询并将它们粘贴到 Excel 模板中来完成此操作,我想摆脱 Excel 模板。 我认为
我知道我很可能会因为这个问题而受到抨击,但没有人问,我求助于你。这是否是一个正确的 javascript > php 转换 - 在我开始不良做法之前,我想知道这是否是解决此问题的正确方法。 JavaS
除了 Ruby-Doc 之外,哪些来源最适合获取一些示例和教程,尤其是关于 Ruby 中的 Tk/Tile?我发现自己更正常了 http://www.tutorialspoint.com/ruby/r
我只在第一次收到警告。这正常吗? >>> cv=LassoCV(cv=10).fit(x,y) C:\Python27\lib\site-packages\scikit_learn-0.14.1-py
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be
我是一名优秀的程序员,十分优秀!