Files Classes Functions Hierarchy
00001 #include <iostream> 00002 #include <fstream> 00003 using namespace std; 00004 00005 #include <cube.h> 00006 00007 void cube::right() 00008 { 00009 // Adjusting for different coordinate system. 00010 uint k = cs.k; 00011 switch (k) 00012 { 00013 case 0: k=2; break; 00014 case 2: k=0; break; 00015 } 00016 00017 right(k); 00018 } 00019 00020 void cube::left() 00021 { 00022 // Adjusting for different coordinate system. 00023 uint k = cs.k; 00024 switch (k) 00025 { 00026 case 0: k=2; break; 00027 case 2: k=0; break; 00028 } 00029 00030 left(k); 00031 } 00032 00033 void cube::faceleft() 00034 { 00035 for (uint i=0; i<3; ++i) 00036 left(i); 00037 } 00038 00039 void cube::faceright() 00040 { 00041 for (uint i=0; i<3; ++i) 00042 right(i); 00043 } 00044 00045 void cube::faceup() 00046 { 00047 for (uint i=0; i<3; ++i) 00048 up(i); 00049 } 00050 00051 void cube::facedown() 00052 { 00053 for (uint i=0; i<3; ++i) 00054 down(i); 00055 } 00056 00057 00058 00059 ostream & cube::print(ostream & os) const 00060 { 00061 uint index = 0; 00062 00063 for (uint i=0; i<6; ++i) 00064 { 00065 for (uint k=0; k<9; ++k) 00066 { 00067 os << (uint) (xi[index]) << " "; 00068 ++index; 00069 } 00070 os << endl; 00071 } 00072 00073 return os; 00074 } 00075 00076 istream & cube::read(istream & is) 00077 { 00078 00079 uint index = 0; 00080 00081 uint c; 00082 00083 for (uint i=0; i<6; ++i) 00084 { 00085 for (uint k=0; k<9; ++k) 00086 { 00087 is >> c; 00088 xi[index] = (colordef)c; 00089 ++index; 00090 } 00091 } 00092 00093 return is; 00094 } 00095 00096 00097 void cube::up(uintc i) 00098 { 00099 assert(i<3); 00100 00101 uintc k0 = i; 00102 uintc k1 = k0+3; 00103 uintc k2 = k0+6; 00104 00105 colordef a0 = access(5,k0); 00106 colordef a1 = access(5,k1); 00107 colordef a2 = access(5,k2); 00108 00109 access(5,k0) = access(0,k0); 00110 access(5,k1) = access(0,k1); 00111 access(5,k2) = access(0,k2); 00112 00113 access(0,k0) = access(4,k0); 00114 access(0,k1) = access(4,k1); 00115 access(0,k2) = access(4,k2); 00116 00117 uint b0 = 8-i; 00118 uint b1 = 5-i; 00119 uint b2 = 2-i; 00120 00121 access(4,k0) = access(2,b0); 00122 access(4,k1) = access(2,b1); 00123 access(4,k2) = access(2,b2); 00124 00125 access(2,b0) = a0; 00126 access(2,b1) = a1; 00127 access(2,b2) = a2; 00128 } 00129 00130 void cube::right(uintc i) 00131 { 00132 uintc k0 = 3*i; 00133 uintc k1 = k0+1; 00134 uintc k2 = k0+2; 00135 00136 colordef a0 = access(1,k0); 00137 colordef a1 = access(1,k1); 00138 colordef a2 = access(1,k2); 00139 00140 access(1,k0) = access(0,k0); 00141 access(1,k1) = access(0,k1); 00142 access(1,k2) = access(0,k2); 00143 00144 access(0,k0) = access(3,k0); 00145 access(0,k1) = access(3,k1); 00146 access(0,k2) = access(3,k2); 00147 00148 access(3,k0) = access(2,k0); 00149 access(3,k1) = access(2,k1); 00150 access(3,k2) = access(2,k2); 00151 00152 access(2,k0) = a0; 00153 access(2,k1) = a1; 00154 access(2,k2) = a2; 00155 } 00156 00157 // No need for efficiency. 00158 void cube::left(uintc i) 00159 { 00160 right(i); 00161 right(i); 00162 right(i); 00163 } 00164 00165 void cube::down(uintc i) 00166 { 00167 up(i); 00168 up(i); 00169 up(i); 00170 } 00171 00172 void cube::reset() 00173 { 00174 faceset(0,red); 00175 faceset(1,green); 00176 faceset(2,blue); 00177 faceset(3,yellow); 00178 faceset(4,white); 00179 faceset(5,orange); 00180 } 00181 00182 void cube::faceset( uintc i, colordef const c ) 00183 { 00184 uint index = i*9; 00185 00186 for (uint i=0; i<9; ++i) 00187 xi[index++] = c; 00188 } 00189 00190 00191 ostream & operator << (ostream & os, cube const & cb) 00192 { 00193 return cb.print(os); 00194 } 00195 00196 cube::cube() 00197 { 00198 reset(); 00199 } 00200 00201 00202
1.5.8