对上次的代码作了一些修改。在码的过程中发现,最核心的部分是在横向、竖向和两个对角方向上找到5个以上相同的数字。

自己的思路是将x行y列所在的x行、y列,以及以此为交叉点的两点对角线上的数字,转化成字符串(这部分是程序中get4str()的功能),然后利用字符串相关函数进行处理(待完成)。

最新修改代码如下:

 import random        # for random.randrange()
import os # for input()
import string # for string.count() ballColorNum = 7 # 7 colors
RowNum = 6 # chesspad have 10 rows
ColNum = 10 # chesspad have 10 cols chPad = [] # save chesspad state
Scores = 0 # save scores class ball():
def __init__(self):
self.color = random.randrange(1,ballColorNum)
self.x = random.randrange(0,RowNum)
self.y = random.randrange(0,ColNum) #---------------------------------------
# initial chesspad state, all 0, COL*ROW
#---------------------------------------
def chesspad_init():
chPad = [[0 for x in range(ColNum)] for x in range(RowNum)]
return chPad
#---------------------------------------
# update chesspad with a ball
#---------------------------------------
def chesspad_update(chPad, ball):
chPad[ball.x][ball.y] = ball.color
return chPad
#---------------------------------------
# redraw chesspad
#---------------------------------------
def chesspad_flush(chPad):
for i in range(len(chPad)):
for c in chPad[i]:
print('%d'%c,end=' ') #for win
#print('\33[1;%dm%d'%(30+c,c),end=' ') #for linux
print('\n')
#---------------------------------------
# count the number of unused spaces in chesspad
#---------------------------------------
def countNull(chPad):
n = 0
for i in range(len(chPad)):
for j in range(len(chPad[i])):
if chPad[i][j] == 0:
n += 1
return n
#---------------------------------------
# move from x1,y1 to x2,y2
#---------------------------------------
def move(chpad,x1,y1,x2,y2):
if x1 > RowNum-1 or x2 > RowNum-1 \
or y2 > ColNum-1 or y1 > ColNum-1:
print('input error') else:
chpad[x1][y1],chpad[x2][y2] = \
chpad[x2][y2],chpad[x1][y1] #---------------------------------------
# calculate_Score
#---------------------------------------
def calculate_Score(chpad):
pass #---------------------------------------
# find
#---------------------------------------
def compare_str(str4dict,x,y):
pass
#---------------------------------------
# generate 4 strings and return a dict:
# FORMART:
# {'RW':'...','CL':'...',
# 'LR':'...','RL':'...'}
# compare with chpad[x][y] which aspears
# 5 times
#---------------------------------------
def get4str(chpad,x,y): sx=sy=slr=srl='' # ROW(X)
for c in chpad[x]:
sx += str(c) # COL(Y)
for i in range(RowNum):
sy += str(chpad[i][y]) # from left-top to right-buttom
for i in range(x):
if x-i <= 0 or y-i <= 0:
break
else:
slr += str(chpad[x-i-1][y-i-1])
slr[::-1] # reverse for i in range(RowNum-x):
if x+i >= RowNum or y+i >= ColNum:
break
else:
slr += str(chpad[x+i][y+i]) # from right-top to left-buttom
for i in range(1,x):
if x-i <= 0 or y+i >= ColNum:
break
else:
srl += str(chpad[x-i][y+i])
srl[::-1] # reverse for i in range(RowNum-x):
if x+i > RowNum-1 or y-i < 0:
break
else:
srl += str(chpad[x+i][y-i]) return {'RW':sx,'CL':sy,'LR':slr,'RL':srl} def main():
print('\n-------------------GAME------------------\n')
pad = chesspad_init() while 1:
n = 1
while 1:
b = ball()
if pad[b.x][b.y] == 0:
print('(%d,%d:%d)'%(b.x, b.y, b.color),end=' ')
pad = chesspad_update(pad, b)
if countNull(pad) == 0:
print("\n\nGAME OVER!")
exit()
n += 1
if n > 3:
break
print('\n') chesspad_flush(pad) x1=y1=x2=y2=0
a = input('Move (x1,y2) to (x2,y2):').split(' ')
x1,y1,x2,y2 = int(a[0]),int(a[1]),int(a[2]),int(a[3])
move(pad,x1,y1,x2,y2 )
print(get4str(pad, x2, y2)) chesspad_flush(pad) if __name__=='__main__':
main()

以上代码后面有修改,98行、112行本来是自己写的一个反转字符串的函数实现,后来才知道用切片str[::-1]实现更简洁。

Python(四):数字连珠2的更多相关文章

  1. Python 1基础语法四(数字类型、输入输出汇总和命令行参数)

    一.数字(Number)类型 python中数字有四种类型:整数.布尔型.浮点数和复数. int (整数), 如 1, 只有一种整数类型 int,表示为长整型,没有 python2 中的 Long. ...

  2. Python 四种数值类型(int,long,float,complex)区别及转换

    Python支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数), 数字数据类型存储数值.他们是不可改变的数据类型,这意味着改变数字数据类型的结 ...

  3. python 四种数值类型(int,long,float,complex)介绍

    Python支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍python 四种数值类型,需要的朋友可以参考一下. 数字数据 ...

  4. Python Number(数字) Ⅰ

    Python Number(数字) Python Number 数据类型http://www.xuanhe.net/用于存储数值. 数据类型是不允许改变的,这就意味着如果改变 Number 数据类型的 ...

  5. 如何使用纯 CSS 制作四子连珠游戏

    序言:你是否想过单纯使用 CSS 也可以制作一款游戏?甚至可以双人对决!这是一篇非常有趣的文章,作者详细讲解了使用纯 CSS 制作四子连珠游戏的思路以及使用奇淫巧技解决困难问题的方法.因为案例本身比较 ...

  6. 【笔记】基于Python的数字图像处理

    [博客导航] [Python相关] 前言 基于Python的数字图像处理,离不开相关处理的第三方库函数.搜索网络资源,列出如下资源链接. Python图像处理库到底用哪家 python计算机视觉编程— ...

  7. python基础——数字&集合&布尔类型

    Python的核心数据类型 内置对象 对象类型 例子 数字 123,3.1415,3+4j,Decimal(小数),Fraction(分数) 字符串 'dodo',"guido's" ...

  8. 零基础学习 Python 之数字与运算

    写在之前 大家好,这里是零基础学习 Python 系列,在这里我将从最基本的 Python 写起,然后再慢慢涉及到高阶以及具体应用方面.我是完全自学的 Python,所以很是明白自学对于一个人的考验, ...

  9. Python之数字

    Python之数字 int(数字)===>在Python3中,int没有范围,在Python2中,int超出范围就叫长整型(Long). 浮点运算:单精度 float 双精度 double a: ...

  10. python取数字、字母

    python取数字.字母 有一串字符串“lxa7YzU”,其中有大写字母.小写字母和数字,现编写一脚本使得实现以下功能: 将这串字符串中的数字.大写字母.小写字母分别取出来并进行分类. 脚本如下所示: ...

随机推荐

  1. code first 尝试

    建表: 1.先用EF连接数据库,配置connectionStrings <configSections> <!-- For more information on Entity Fr ...

  2. MongoDB学习笔记--基本命令

    转自:http://www.cnblogs.com/xusir/archive/2012/12/24/2830957.html 数据库文件默认位置 /var/lib/mongodb 成功启动Mongo ...

  3. Java学习笔记--集合元素的比较Comparable,Comparator

    原文见: http://www.cnblogs.com/sunflower627/p/3158042.html 1. Comparator 和 Comparable 相同的地方 他们都是java的一个 ...

  4. ubuntu 终端只显示当前目录名称

    修改.bashrc文件: 原来: #修改终端提示颜色 color_prompt=yes if [ "$color_prompt" = yes ]; then PS1='${debi ...

  5. Android App Widget的简单使用

    App Widget是一些桌面的小插件,比如说天气和某些音乐播放应用,放到桌面去的那部分: 例如: 实现步骤及代码如下: (1)首先,在AndroidManifest.xml中声明一个App Widg ...

  6. bzoj1178

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1178 看ppt http://wenku.baidu.com/link?url=dJv6LNm ...

  7. Hadoop集群上使用JNI,调用资源文件

    hadoop是基于java的数据计算平台,引入第三方库,例如C语言实现的开发包将会大大增强数据分析的效率和能力. 通常在是用一些工具的时候都要用到一些配置文件.资源文件等.接下来,借一个例子来说明ha ...

  8. http与https的区别以及https的加密原理

    HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议 它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息.它使用安全套接字层 ...

  9. [转]notifyDataSetChanged() 动态更新ListView

    有时候我们需要修改已经生成的列表,添加或者修改数据,notifyDataSetChanged()可以在修改适配器绑定的数组后,不用重新刷新Activity,通知Activity更新ListView.今 ...

  10. select与epoll分析

    关于select与epoll的区别,网上的文章已是一大堆.不过别人的终究是别人的,总得自己去理解才更深刻.于是在阅读了大量的文章后,再装模作样的看下源码,写下了自己的一些理解. 在开始之前,要明白li ...