在写一个井字棋游戏,一共三个类:棋盘Chessboard,人Player, 主类Main.
棋盘是一个二维数组,里面有:setarrayvalue(), getarrayvalue(),checkwin(),checkfull()等方法。
1)在Main类调用了(Player player和Chessboard ff),想使用ff.getarrayvalue(m,n),并判断它是否等于1,但是这里m 和n 不对, 应该怎么做?(图一代码标红处)
2)Main类中,我只new了一个Player, 这样可以吗?有的人是new 两个player,并赋值,但是我不知道怎么赋值使用它:。。。
3)棋盘大小,扩展成可以从键盘输入数值,哪里不正确呢?(图二,注释处)
4)如何确保输入数值永远不超过棋盘范围,且只是int,且输入不满足条件的话,能够一直提醒用户重新输入?(图3Player类里的一个方法)注释处,为什么不对呢? 如何确保输入是int,不是字母呢?
-------------------------------------
问题已解决,添加了一个内部类,返回了m,n。 图片代码不全,见谅!
你用的全角括号吧, 重敲一下就好了。
1.首先从面相对象的角度,你的playerInput方法到底是做什么的,是玩家角色落子的坐标,还是棋盘角色定义棋盘的大小,如果是后者,不应该是固定大小,程序开始时初始化就可以了。如果是前者,该方法应该定义在Player类中,并且给Player设置m,n属性表示当前落子位置,也可以定义一个数组保存Player每一步落子的位置。在
2.用户输入时可定义m,n类型为Integer,然后用户输入后判断是否为null,如果是null,可递归调用PlayerInput方法。
play方法里的m跟n有定义么?没看见你定义就直接使用了
根本就没有arrayvalue这个方法么,还有括号的问题
不见arrayValue方法
你的判断语句ff.arrayvalue后面跟了一个大括号,但ff.arrayvalue并不是一个函数而直接就是一个值,你需要对ff.arrayvalue进行加减乘除运算,才能达到你想要的结果,你是新手吧,好低级的错误
你这个arrayvalue只是chessboard的一个属性,不是方法
1、你的arrayvalue值是0,可以写ff.arrvalue但不能写ff.arrayvalue(m,n),因为根本没有名字为arrayvalue,参数为m,n的方法,怎么调用?
2、player类不贴出来那就默认按和palyer1一样复制呗
3、你这个真的是,你方法名第二个单词首字母小写我就不说了,变量名、方法名和类名的命名不规范我也不说了,只是你在方法里重新创建了
一个field[][]局部变量然后你告诉我你还想用这个局部变量设置棋盘大小?棋盘类开始不就有吗,还要重新定义一个局部变量干嘛?
4、hasNextInt()判断是不是整数,你的方法有问题,getfieldsize()返回固定值3,然后getarrayvalue又重新设置了field数组的范围,不知道你写的判断
有什么用,如果想不越界,要么根据固定值3判断,要么根据m的长度判断,这不是井字棋吗,输入m就行了,n和m的长度难道不相等?
谢谢大家!确实是新手,把完整代码放上来了,Main里面的arryvalue()改了,手误,确实没有arrvalue(), 应该是getarrayvalue().抱歉!
但是问题还是那个问题。。。
Main--play(): if (ff.checkwin()==true) {
if(ff.getarrayvalue(m,n)==1) { 如果把它改成if(ff.arrayvalue==1) 程序可以运行,但是无法checkwin之类的
else if(ff.getarrayvalue(m,n)==2) { 如果把它改成if(ff.arrayvalue==2) 程序可以运行,但是无法checkwin之类的
问题在m,n,还有这个getarrayvalue()上,不知该怎么改?
playerinput(): player选位置,改变在数组中对应位置的值(arrayvalue),奇数次,player cmd 显示为X,数组中的值(arrayvalue)为1,
偶数次,player显示O,值为2.